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

解決済みの質問

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言語入門者なので説明不足な点もあるかと思いますが、よろしくお願いします。

投稿日時 - 2006-10-19 02:51:34

QNo.2482266

暇なときに回答ください

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

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);

エラー処理とか何も考えないで書いた。
文字列を直接変数名にするのは出来ないはず。

投稿日時 - 2006-10-19 08:39:57

補足

コメントありがとうございます。
なるほど、文字列を直接変数名にするのは無理ですか。

Trick--o-- 様のプログラムを拝借させていただき、後ほどテストしてみようと思います。

投稿日時 - 2006-10-19 16:52:47

お礼

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

投稿日時 - 2006-10-20 01:41:02

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

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

回答(4)

ANo.4

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

投稿日時 - 2006-10-19 20:10:16

お礼

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

投稿日時 - 2006-10-20 01:41:15

ANo.3

> /* txtファイルの中 */

ですが、C言語のコメントと同様に扱えばよいのでしょうか?
その場合、文字コードは何でしょうか?

> mainでhoge.txt内の文字列"abc"を検索し

これは、コメント内に"abc"があっても、無視するのですよね?

投稿日時 - 2006-10-19 13:10:31

補足

コメントありがとうございます。

申し訳ありません。コメントアウト部分の/**/は、実際のテキスト内にはありません。今回、テキストの中身の場所を示すために目印として使用しましたが、逆にわかりにくくなってしまいましたね。

ということで、hoge.txtの中身は、変数名とその値のみしか存在しないように設定したいと考えております。

例)

abc 100
bcd 150
cde 200

投稿日時 - 2006-10-19 16:44:16

ANo.1

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

投稿日時 - 2006-10-19 03:41:22

補足

早速のコメントありがとうございます。

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

投稿日時 - 2006-10-19 16:57:15

お礼

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

投稿日時 - 2006-10-20 01:40:39