- 締切済み
ファイルを読み込んで入力する方法
C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている数値を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に、プログラムのmain関数内の {x1[0],x2[0],x3[0],x4[0],x5[0]} {x1[1],x2[1],x3[1],x4[1],x5[1]} のような場所に、順番に入れて行きたいです。 "a.txt"の中の1行目を左から順にx1[0],x2[0],x3[0],x4[0],x5[0]に入力し、次に2行目を同じく左から順に・・・というように、"a.txt"ないの行数だけ入力していけるプログラムを考えています。 どなたかご教授していただけないでしょうか。 拙い文章で申し訳ありません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ICE_FALCON
- ベストアンサー率56% (63/111)
・入力は必ずint型なのか? ・入力の列数は必ず5なのか? などなど、どのような形式を読めるようにするのかで、 複雑さが違ってきます。 とりあえず、 ・入力は必ずint型 ・入力の列数は必ず5 で質問の通りx1[],x2[],x3[],x4[],x5[]に入力するならこんな感じでもいい・・。 #define MAX_LINE_SIZE 1024 int i,len; FILE *fp; char buff[MAX_LINE_SIZE]; int *x1, *x2, *x3, *x4, *x5; fp = fopen("a.txt","r"); if(NULL == fp){ //エラー処理 } for(len = 0; fgets(buff, MAX_LINE_SIZE, fp) != NULL; len++); x1 = (int *)malloc(sizeof(int) * len); if(NULL == x1){ //エラー処理 return; } x2 = (int *)malloc(sizeof(int) * len); if(NULL == x2){ //エラー処理 return; } x3 = (int *)malloc(sizeof(int) * len); if(NULL == x3){ //エラー処理 } x4 = (int *)malloc(sizeof(int) * len); if(NULL == x4){ //エラー処理 } x5 = (int *)malloc(sizeof(int) * len); if(NULL == x5){ //エラー処理 } fseek(fp, 0L, SEEK_SET); for(i = 0; i < len; i++){ fscanf(fp, "%d %d %d %d %d", &x1[i], &x2[i], &x3[i], &x4[i], &x5[i]); printf("%d %d %d %d %d",x1[i], x2[i], x3[i], x4[i], x5[i]); } free(x1); free(x2); free(x3); free(x4); free(x5); fclose(fp); csvフォーマットのほとんどに対応するなら、かなり面倒です。 その場合は全く違うソースになります。 C++とのことですが、とりあえずCで・・。