• ベストアンサー

txtファイルから値の取得方法 [C言語]

main関数内で使用する変数にtxtファイルから値を読み取り、それを代入する方法を探しております。 以下のようなシステムを製作したいと考えております。 (1)main内で定義した変数 int abc,bcd,cde; (2)hoge.txtの内容が /* txtファイルの中 */ abc 100 bcd 150 cde 200 /* --------------- */ というように記述 (3)mainでhoge.txt内の文字列"abc"を検索し、その後ろにある値100をabcに代入。次に"bcd"を検索し・・・というふうに値を代入していきたいと考えております。 まだ、C言語入門者なので説明不足な点もあるかと思いますが、よろしくお願いします。

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

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

FILE *fp; char line[256]; int abc,bcd,cde; char *token; int n; fp = fopen("data.txt","r"); while(fgets(line,256,fp) != NULL) {  token = strtok(line," \n");  n = atoi(strtok(NULL," \n");  if(strcmp(token,"abc") == 0) {   abc = n;  } else if(strcmp(token,"bcd") == 0) {   bcd = n;  } else if(strcmp(token,"cde") == 0) {   cde = n;  } } fclose(fp); エラー処理とか何も考えないで書いた。 文字列を直接変数名にするのは出来ないはず。

tiger2323
質問者

お礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

tiger2323
質問者

補足

コメントありがとうございます。 なるほど、文字列を直接変数名にするのは無理ですか。 Trick--o-- 様のプログラムを拝借させていただき、後ほどテストしてみようと思います。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

既に回答が出ているように、文字列を直接変数名にすることは原則としてできません。しかし、CINTのようなインタープリタ方式の処理系を使えば、それも可能かと思います。

tiger2323
質問者

お礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> /* txtファイルの中 */ ですが、C言語のコメントと同様に扱えばよいのでしょうか? その場合、文字コードは何でしょうか? > mainでhoge.txt内の文字列"abc"を検索し これは、コメント内に"abc"があっても、無視するのですよね?

tiger2323
質問者

補足

コメントありがとうございます。 申し訳ありません。コメントアウト部分の/**/は、実際のテキスト内にはありません。今回、テキストの中身の場所を示すために目印として使用しましたが、逆にわかりにくくなってしまいましたね。 ということで、hoge.txtの中身は、変数名とその値のみしか存在しないように設定したいと考えております。 例) abc 100 bcd 150 cde 200

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

単純には、 fscanf (か、fgets とsscanf)で、文字列と数値を一行毎読み取り 文字列部分をstrcmp なんかで検索する文字列と一致するか調べて、代入するというような感じでイイと思います。

tiger2323
質問者

お礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

tiger2323
質問者

補足

早速のコメントありがとうございます。 Trick--o-- 様のプログラムを参考にBLUEPIXY様がおっしゃるような感じでプログラムを作成してみます。その際また問題点が出てきましたら、相談に乗っていただけるとありがたいです。

関連するQ&A