- ベストアンサー
大量の入力ファイルを扱うとき、for文などで簡略化できる?
例えば、"input_1.dat", "input_2.dat" ... "input_9.dat","input_a.dat" ... "input_z.dat"のように、 ファイル名が一定のフォーマットに従った 入力ファイル群があるとします。 (ファイル内の数値の配置フォーマットも一緒) これらのファイルの中身を fopen→fscanf→fcloseを使って読みこむとき、 FILE *fin1, *fin2; fin1 = fopen("input_1.dat","r"); fin2 = fopen("input_2.dat","r"); ... のようにファイル名をひとつひとつ読みこまず、 for, whileなどを用いて簡単に書けないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
FILE *fp; char *moji = "123456789abcdefghijklmnopqrstuvwxyz"; char fname[20]; int i; for(i = 0; i < 9+26; i++) { sprintf(fname, "input_%c.dat", moji[i]); fp = fopen(fname, "r"); /* fscanf での処理 */ fclose(fp); }
その他の回答 (2)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
もう少し表現を変えると、こういう方法もあります。 ただし、「ファイル名が一定のフォーマットに従っている」というのは、#1 の方の回答の方が良く反映されていますが。 char *fileName[] = { "input_1.dat", "input_2.dat", "input_3.dat", .... "input_z.dat", NULL /* 終わりの印 */ }; for(i = 0; fileName[i]; i++) { fp = fopen(fileName[i], "r"); ... fclose(fp); }
お礼
fopenのファイル名入力には、そのような方法も あるのですね。 解答ありがとうございました。
#1です。 後で思ったのですが、for文のところは、 for(i = 0; moji[i] != '\0'; i++) の方が汎用性があるかも。 要するにfopenするファイル名を組み立てて、それを引数にすればよいのです。
お礼
sprintfという関数があるとは知りませんでした。 解答ありがとうございました。