• 締切済み

ファイル操作について

ファイルから情報を読みこみ構造体に設定しようとしています。 方法としては、fopen,fgetsにより行取得しようと考えているのですが、ファイルが以下のようになっており、 キーワードに対応する構造体も決まっています。 力作業で設定しても良いのですが、何かもっと美しい方法があれば助言お願いします。 ファイル内容 (A) AAA="12345" BBB="33333" (B) BBB="1122" CCDD="5674" (C) TTTT="#####" AAAA="kkkkk" 設定する構造体 typedef struct{ char AAAA[20]; char BBBB[20]; }A; typedef struct{ char BBB[20]; char CCDD[20]; }B; typedef struct{ char TTTT[20]; char AAAA[20]; }C; です。

  • sting
  • お礼率12% (35/274)

みんなの回答

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

回答がつかないようなのでひとこと。 "力業"でどういうことをしようとしているのか判りませんが、1行読込み、文字列解析、キーワード判別、パラメータ判別、格納....、という手順は変えようがないと思いますよ。 あとはその解析ロジックをどうスマートに書くか、ですけどね。

関連するQ&A

  • 入れ子の構造体について

    例えば、入れ子の構造体を1つ使いたい場合、 struct bbb{ int b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; と書くと、「dt.a.b = 10」とやれば、値等を設定できると思いますが、 入れ子の構造体を2つ使いたい場合も、同じように書けるのでしょうか? struct ccc{ int c; }; struct bbb{ struct ccc b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; dt.a.b.c = 10; と書けるのでしょうか?こんがらがってしまって、どう書いていいのか・・。 2つでも出来るのであれば、コードの書き方を教えて頂けませんか?

  • C言語の構造体のサイズについて

    いつもお世話になっていります。 早速ですが、C言語の構造体のサイズについて教えてください。 typedef struct B { short code; char name; float price; } B; typedef struct A { B bbb[10]; double sougaku; } A; A aaa; といった構造体があった場合に、 sizeof(aaa.bbb.code) + sizeof(aaa.bbb.name) + … + sizeof(aaa.sougaku) という風に一つ一つサイズを取得し、合計して構造体のサイズを取得した場合と sizeof(aaa) という風に構造体のサイズを取得した場合のサイズの値が異なるといった現象が起きます。 その原因が分からなくて困っております。 そこで考えられる要因をお教えください。 因みに実際の構造体はサイズで言えば2500バイトくらいあります。 froat/char/double/short 型を使用しております。 よろしくお願いします。

  • free()について

    free()についてです。 よろしくお願いします。 ある構造体Aがあったとして その構造体Aの中に構造体Bのポインタが あったとします。 typedef struct{ char b; short c; } B_t; typedef struct { int a; B_t *bbb; } A_t; この構造体をプログラム中でポインタで扱い mallocで領域確保している場合に(A,B共に) Aをfree()した場合は、Bも開放されるのでしょうか? 以下、質問のサンプルです。 A_t *aaa; aaa = (A_t *)malloc(sizeof(A_t)); aaa->bbb = (B_t *)malloc(sizeof(B_t)); : : free(aaa); /* ←これで、aaaのメンバであるbbbは */ /* 開放されるのでしょうか? */ よろしくお願い致します。

  • 【C++】typedefの役割について

    C++だけでなく、Cでも同様なのだと思うのですが、下記の(1)、(2)の違い がよくわからず、どなたかにご教授いただければと思っています。 (1) struct{   (略) }BBB; (2) typedef struct{   (略) }BBB; (2)が下記((2)')のようになるんであれば、AAAという名前の構造体を BBBという名前で定義しているという事で理解できるんですが、 (2)のようにしている意図が理解できません。 (typedefの記述は必要なんでしょうか?) すでに動いているシステムなので、問題ないのは明らかなんですが。 (2)' typedef struct AAA{   (略) }BBB;

  • 可変長構造体をファイルから読み込み処理

    可変長の構造体、 typedef struct 構造体(仮) { char c1,c2; float f1,f2; double d; int size; //↓strのサイズ char str[1]; //文字配列 }構造体(仮); の形式で書かれたバイナリデータファイルがあります。 そのファイルを読み込んでcsv形式で出力する処理を、 ファイルからの読み込む回数を減らしてやりたいと思っています。 その方法を教えていただけませんか? よろしくおねがいします。

  • 構造体のファイル出力

    以下のような構造体を、テキストファイルに保存するにはどうしたらよいでしょうか? 構造体には、4つのデータがある場合、以下のようにします。 [構造体] typedef struct comp_bango { char bango[3]; } COMP; 出力テキスト 100 200 300 400

  • どのようなレコード構成でもfillerという項目はスペースで埋める関数

    C言語の話です。 A,B 二つのファイルにテキストのデータを書き込みます。 レコードを何件も書き込んでいくのですが、レコードとレコードは連続して書き込んでいきます。 各ファイルのレコードの構成を表す構造体が次のように定義されています。 A_RECのほうはAファイルで、B_RECのほうはBファイルです。 typedef struct { char rec_kbn[1]; char num[16]; char filler[3]; }COM, *COMp; typedef struct { COM com; char a1[8]; char a2[2]; char a3[9]; char filler[11]; }A_REC, *A_RECp; typedef struct { COM com; char b1[3]; char b2[15]; char filler[22]; }B_REC, *B_RECp; AとBのレコード構成は違いますが、 fillerというメンバは必ず空白(スペース)で埋めなくてはいけません。 fillerというメンバに対して何もしなかったら、そこには何が入っているのでしょうか。 ヌル文字('\0')で埋まっているのでしょうか。それとも、特定できないごみでしょうか。 空白で埋まっていないなら、空白で埋めることになるのですが、 fillerを空白で埋めるという操作をまとめて一つの関数にできないでしょうか。 どんな構造体(あるいは構造体のポインタ)を受け取っても、fillerというメンバは空白で埋めるという関数は作れますか。 やはり、fillerの位置やサイズは引数として受け取らなければ、そのような関数は作れませんか。 typedef struct { char rec_kbn[1]; char num[16]; char filler[3]="  "; /* ダブルクォーテーションの間はスペース3つ */ }COM, *COMp; このようにすることはできますか。できるならば、ちゃんと意図したとおり、空白で埋められているのでしょうか。 なお、*COMpや*A_RECpや*B_RECpですが、それは使わなくてもきまりごととして書くことになっています。 よろしくお願いいたします。

  • 基本的な領域確保の仕方について

    下記のような構造体が宣言されている場合、 A.c.e ←を配列扱いにし、 A.c.e[0].g.h ←を配列扱いにし、 A.c.e[0].g.h[0].iにデータを設定するには、 どのように領域を確保すれば良いのでしょうか? eee型はポインタ宣言のみされていて配列宣言されて いません。(Max10配列) typedef struct { int len; char *i; } hhh; typedef struct { int number; hhh *h; } ggg; typedef struct { fff f; ggg g; } eee; typedef struct { int number; eee *e; } ccc; typedef union { aaa a; bbb b; ccc c; ddd d; } A;

  • グローバル変数について

    ヘッダに宣言した構造体にあるモジュールでテデータを格納し、 各々のモジュールでそのデータを参照したいのですが、 以下の方法で可能でしょうか? ##CMN.h### typedef struct { char AAA[5]; char BBB[5]; }stCmn; typedef stCmn Cmn_inf; ###A.c### memcpy(Cmn_inf.AAA,"TEST",4); ###B.c### char A[5]; memcpy(A,CMN_inf.AAA,4); ※ A.c B.cに #include "CMN.h"を記述

  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。