こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数のファイルへの一括処理(困ってます)

あるディレクトリ内の全てのファイルに同じ処理(添付のプログラムによるtest1.csvファイルに対する処理と同一の処理)をしたいと考えています。
どのようなプログラムを組めば良いのですか?

手法については検討もつかない状況です。
教えていただけないでしょうか?
よろしくお願いいたします。

(1)添付のプログラム
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{
FILE *fp;
char a[50];
double b;
char *p;

if((fp = fopen("test1.csv", "r")) == NULL)
return 0;
while(fscanf(fp, "%s\n", &a) != EOF){
p = strtok( a, "," );
b = atof(a);
printf("%lf ", b);
while(p != NULL)
{
p=strtok(NULL, ",");
if(p != NULL)
{
b = atof(p);
printf("%lf\n", b);
}

getch();
}
}
fclose(fp);

return 0;
}

(2)プログラムで使うCSVファイル
-749.95,1.499894061
-749.9,2.371277071
-749.85,3.01070131
-749.8,-0.92298313
-749.75,3.111961134
-749.7,-1.642278763
-749.65,2.759562723
-749.6,0.869387239
-749.55,1.400240703
-749.5,-0.574988131
-749.45,-2.282041367
-749.4,-1.104953718
-749.35,2.45568825
-749.3,-1.391859875
-749.25,-1.600438736
-749.2,0.116074589
-749.15,2.973864166
-749.1,2.652719198
-749.05,1.584699094
-749,2.129474673
-748.95,1.847275561
-748.9,2.974398019
-748.85,1.561458246
-748.8,2.897905731
-748.75,2.655075544
-748.7,-2.677451989
-748.65,-0.871814301
-748.6,-3.098832888
-748.55,2.565297638
-748.5,-2.073626148
-748.45,-0.300440285
-748.4,0.515248274
-748.35,2.983715685
-748.3,-2.47909508

投稿日時 - 2011-04-04 13:59:00

QNo.6643680

すぐに回答ほしいです

質問者が選んだベストアンサー

以下のようなコードでカレントディレクトリ内のファイルを列挙できます。
FindFirstFile関数とFindNextFile関数を使います。
カレントディレクトリ以外のディレクトリのファイルを列挙したい場合は、
FindFirstFileの引数でパスを指定するか、SetCurrentDirectory関数でカレントディレクトリを移動すればいいはずです。
これで次々ファイル名が取得できるので、それぞれのファイル名でfopenして計算処理を
行えばいいと思います。


//////////////////////////////////

#include <stdio.h>
#include <windows.h>

int main(void) {
HANDLE hFind;
WIN32_FIND_DATA fd;


hFind = FindFirstFile("*.csv", &fd); /* カレントディレクトリのファイルを列挙 */

if (hFind == INVALID_HANDLE_VALUE) {
fprintf(stderr, "ファイルを取得できません。\n");
return 1;
}

/* 次々列挙 */
do {
//ファイル名の表示
printf("%s\n", fd.cFileName);

} while (FindNextFile(hFind, &fd));

/* 開放 */
FindClose(hFind);

return 0;
} //end of main

投稿日時 - 2011-04-04 14:41:53

お礼

ありがとうございます。

投稿日時 - 2011-04-05 01:16:32

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

私なら、#2さん回答にあるように、シェルの機能を使うか、標準入力からファイル名を読み取るようにしてパイプを使う(ls *.csv| a.out みたいな感じ)にします。

投稿日時 - 2011-04-04 16:58:25

お礼

ありがとうございます。

投稿日時 - 2011-04-05 01:16:02

ANo.3

> あるディレクトリ内の全てのファイル

その情報を取得する、処理系に依存しない方法はありません。
処理系を特定してください。

投稿日時 - 2011-04-04 15:57:57

お礼

ありがとうございます。

投稿日時 - 2011-04-05 01:17:04

ANo.2

自分だったら「対象のファイル名」を引数にとるプログラムを作り, シェルなりなんなりで回す.

投稿日時 - 2011-04-04 15:11:17

お礼

ありがとうございます。

投稿日時 - 2011-04-05 01:16:53

あなたにオススメの質問