-PR-
締切済み

ファイルを読み込んで入力する方法

  • すぐに回答を!
  • 質問No.5370037
  • 閲覧数15
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 0% (0/1)

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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル10

ベストアンサー率 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で・・。


このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

-PR-
ページ先頭へ