プロが教えるわが家の防犯対策術!

あるディレクトリ内の全てのファイルに同じ処理(添付のプログラムによる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

A 回答 (4件)

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

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/04/05 01:16

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



その情報を取得する、処理系に依存しない方法はありません。
処理系を特定してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/04/05 01:17

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

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/04/05 01:16

以下のようなコードでカレントディレクトリ内のファイルを列挙できます。


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
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2011/04/05 01:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!