• ベストアンサー

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

  • C言語

    演算がうまくできなくてこまっています。 int hogeと定義した変数があります。 プログラムの途中で色々代入をし終えた結果、 printf(%d,hoge)とすると「49」と表示、 printf(%c,hoge)とすると「1」と表示されます。 %dは10進法のはずなのになぜか49となります。 今このhogeを用いて計算をしたいのです 例えば、hoge = hoge*5+1のように純粋に10進法で計算したのですが、 このままだと49*5+1=...となってしまします。 どうすれば改善出来ますか?

  • C++でファイル出力

    C++の初心者です。 あるデータをプログラムで計算し、それをファイル出力したいと考えております。 その際、10秒ごとに名前を変えてファイルを新規作成し出力ということはできるのでしょうか? たとえば、 int main(){ for(int i =0;i <10000; i++){ //cout << i << '\n'; /* ここでファイル出力をしたい */ /* 0から順に計算して改行し、出力 */ /* 最初は"hoge1.txt"に出力後、10秒ごとに"hoge2.txt"、 "hoge3..txt"と出力したい*/ /* hoge5.txtになったら終了 */ } } という感じです。 どなたか教えていただけませんでしょうか?

  • C言語のfloat型変数の値代入と表示について

    float型変数の値代入と表示について質問があります。 #include <stdio.h> int main(void) {  float flVal = 50.456;  printf("float型変数:%f", flVal);  return 0; } 上記を実行すると、「float型変数:50.456001」と表示されました。 また、float flVal = 50.1; と変えて実行すると、「float型変数:50.099998」と表示されました。 それぞれ期待していた結果は、 「float型変数:50.456000」、「float型変数:50.100000」だったのですが 代入した値と結果が微妙に異なる理由は何でしょうか。よろしくお願いします。

  • 【再確認】C言語のcharとvarcharの扱い

    すみません、前回も似たような質問をしましたが、再確認させてください。 例えば、変数1はサイズが256、型がvarchar、値がabcで、変数2はサイズが20、型がcharの場合、 変数1から変数2には値を直接代入できますか? また、代入できた場合、変数2の値はabc+スペース17桁になりますか? 逆に変数2の値がabcの場合、変数2から変数1には直接代入できますか? また、代入できた場合、変数2の値はabc(後ろにスペース等なし)になりますか?

  • awkでファイルから読み込んだ値を、演算させるにはどうしたら良いですか

    awkでファイルから読み込んだ値を、演算させるにはどうしたら良いですか。 ファイル(hoge.txt)の内容は、次の通り(全4行) 123 456 50 20 これを、bashスクリプトで計算させます。 FF=`cat hoge.txt | awk 'BEGIN {x=$2;printf ("%s, %s", (148+x*0.05), x);}'` echo "答え = ${FF}" このときの$2の値は、50です。但し、文字列として扱われているようです。 xの値を、数値として代入され、四則演算をさせるにはどうしたら良いですか? 以上、よろしくお願いします。

  • C言語、リダイレクト

    C言語の初心者です。 コマンドプロンプトで「./a.out <text.txt」とうつと、text.txtのデータを取得し、表示するプログラムをつくろうと思っています。 試行錯誤の結果 #include <stdio.h> main(){ char abc; scanf("%s",&abc); printf("%c",abc); } だとエラーもなくコンパイルできるのですが、肝心のファイルの中身が一文字までしか表示されません。 これはchar abcでabcを一文字だけの変数にしているからみたいですが、調べてみたのですがどうもここから先に進めません。 どこをどのように変えれば良いですか?お願いします。

  • 【VB2005】txtファイルからINIファイルみたいに読込む

    googleや、ITプロのサイトなどで VB2005のINIファイルもしくはXmlの読書きが理解できずに、 とりあえず、txtファイルから設定の読込みをしたいと考えてます。 ↓Text.txt↓の内容 [Mode] Mode=1 [SYSTEM] Menu1=登録処理 Menu2=保存処理 ・各、=(イコール)のあとの値を変数に代入したいと思ってます。  状況と、したいことが伝わりにくいかも知れませんが  ご口授お願いします。

  • C言語 テキストファイルの文字列を配列に代入したい

    aaa.txt というテキストファイルがあり、その中身が 8 5 21 13 であるとします(1行のみ)。 main関数内で宣言した整数の配列、 int A[10]; に対して、 A[0]=8 A[1]=5 A[2]=21 A[3]=13 のように代入したいのですが、どのファイルポインタの関数を使ってどのように書けばいいのかわかりません。 ご教授お願いします。

  • 変数の代入値を外部の.txtファイルから読む

    var AAA = "XXXX"; このように変数AAAにXXXXという値を代入したいのですが、XXXXは外部ファイルTEXTDATA.txt内にあります。 javascriptのみで、TEXTDATA.txtをオープンして文字列を取得することはできるのでしょうか? TEXTDATA.txt には XXXX 以外の文字はありません。 だれか回答できるかた、よろしくお願いします。

  • Cのポインタについて(関数への値渡し)

    C言語のポインタに関する質問です。関数に引数を渡す方法として以下の誤ったswap関数でなぜだめなのかいまいち得心できません。わかりやすくかみくだいて説明していただけると有り難いです。 できましたら、トレースともうしますか、変数の値の動きを詳細に段階的にプログラムの流れに沿って追っていって、だからこうなんだよ、みたいな解説がいただけたら有り難いです。わがままいってすみません。 /* 誤ったswap関数の宣言 */ void swap(int x, int y); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(num1, num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* 誤ったswap関数の定義 */ void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } ---------- /* swap関数の宣言 */ void swap(int *pX, int *pY); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(&num1, &num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* swap関数の定義 */ void swap(int *pX, int *pY) { int tmp; tmp = *pX; *pX = *pY; *pY = tmp; }