連番のH画像を一気にダウンロードするat UNIX
連番のH画像を一気にダウンロードする - 暇つぶし2ch41:名無しさん@お腹いっぱい。
01/01/13 01:54
>>39

日付関係の便利なライブラリがある言語を使えばいいと思う
(RubyとかJavaとか)が、即席でCでジェネレータを書いてみた。
ただし仕様は限りなく手抜き。
日付フォーマット変えたいときはPRINTFMTをstrftime(3)で
指定可能な適当なものに変更してくれ。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define PRINTFMT "%Y%m%d"

int gendate(const char *from, const char *to)
{
  const char *fmt = "%d%c%d%c%d";
  int i, y, m, d;
  char junk[2];
  struct tm local;
  time_t secs[2];
  char buff[24];
  const char *p;

  memset(&local, 0, sizeof(local));

  for (i = 0; i < 2; ++i) {
    p = i ? to : from;
    if (sscanf(p, fmt, &y, &junk[0], &m, &junk[1], &d) != 5) {
      fprintf(stderr, "Invalid date format: %s\n", p);
      return 2;
    }
    local.tm_year = y - 1900;  /* XXX */
    local.tm_mon = m - 1;
    local.tm_mday = d;
    secs[i] = mktime(&local);
    if (secs[i] == -1) {
      fprintf(stderr, "Can't handle date: %s\n", p);
      return 2;
    }
  }

  while (difftime(secs[0], secs[1]) <= 0) {
    strftime(buff, sizeof buff, PRINTFMT, localtime(&secs[0]));
    puts(buff);
    secs[0] += 60 * 60 * 24;
  }
  return 0;
}

int main(int argc, char **argv)
{
  if (argc < 3) {
    fprintf(stderr, "usage: %s from to\n", argv[0]);
    return 1;
  }
  return gendate(argv[1], argv[2]);
}




次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch