これ何て呼びますか Part2

C++で勉強しているのですが、

下のような内容のファイルをつくり、プログラムで
左辺を検索して右辺の数字を読み込むには
どうしたらよいでしょうか?

ただし、1字1字の検索ではなく3文字なら3文字を
検索して右辺の数字を読み込むようにするような簡潔な
プログラミングを望んでます。
(1文字ごとの検索なら簡単にできるのですが
めちゃくちゃ汚いソースになったので完結にしたいのです。)
-----------------------File Start
opt = 1;      オプション番号
temp = 2;      テンポラリ位置
link =3;       リンカー場所
data=4;       データの種類
hoehoe = 5;    ほえほえの種類
-----------------------File END

例:
dataという文字を探してその文字の右辺を読み取りたいのです。
セミコロンより右は読まないようにしたいのです。

宜しくお願いします。

A 回答 (2件)

Cの標準ライブラリ関数だけで書きたいのですか?



こういう処理は、誰でもすること&低レベルな(細かい)処理なので、ホントなら「自作」してはいけません。

記憶があまり定かでないのですが、
Windowsの環境でしたら GetProfileString、GetProfileStringIng, etc... が使えますし、C++のクラスライブラリにも適当なものが見つかるはずです。
(Javaなんかだと、言語標準でクラスが用意されてます。Properties)


もしC標準ライブラリだけで自作するのであれば、下のヒントに書いた文字列操作関数を使うと便利だと思います(コンパイラがないので、ちゃんと動くコードをかけなくて残念ですが・・)。

   char* strtok(const char*, const char*);
   文字列をトークン(特定の文字により区切られる最小の要素)に分割する。

   int strncmp(const char*, const char*, int);
文字列同士を先頭からNバイト比較する


こういう関数を作成するなら「部品」として再利用したいですよね。

ガリガリと書いた挙句に、汎用性を欠く仕様(左辺がかならず行の最初から始まっていないと×、左辺と=、=と右辺の間にスペースが1つでないと×など・・)にならないよう気をつけてください。たとえば行の先頭が「;] (line[0] == ';')
なら、注釈行として読み飛ばすなどの考慮があったほうがベターです。

標準ライブラリ関数も使わない・・なんてのは論外ですよ(笑)。。

この回答への補足

すみません。情報が少なかったかも知れません。
とりあえず、DOS上でつかうもので、
また、相手のファイル(質問で出しましたデータSample)が
どういう状況ではき出されているのか仕様が全く見えないもので、
分割していく方法しかないのですか。

わたしが考えていたのは、ラインを読み込み
スペースを削除し、そして「;」以上は掃き捨てにし、
(ここまではできておるのですが)その後、
検索文字と比較しようとしていたのです。

これよりもいい操作があればと思っていたのですが・・・・

strtokを使うということには思いつきませんでした。
ありがとうございます。参考にさせていただきます。

補足日時:2002/04/02 00:40
    • good
    • 0

きちんとやる場合でなく、簡単に書く場合を・・・。




while(gets(line)) {
n = sscanf(line," %[a-z] = %d ; %s", name,&num,comment);
if ( n >= 2 && !strcmp(name,"data") {

}
}

まあ、gets()なんて使うとバッファオーバーフロー攻撃を受けるとか,
エラーチェックが手抜きとか、そういう問題はありますし、
その上、思いついたのを書き下ろしただけで、
コンパイルはおろか、ちゃんと動くかもわかりません(^^;;;;


でも、私が使い捨てレベルのプログラムを書くときにはよく使ってます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
結局、自分でポインタごとに比較してやりました。
自分で作るのは難しいですね。

お礼日時:2002/04/26 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報