txtファイルの""で囲まれた文字を読みとるには?

解決


FAL  2006-01-18 17:27:27  No: 60330

こんにちわ

file.txtの内容
-------------
"a b" "ccccccccc"
"c"    "dd"
"dd"  "ee"
-------------
などスペースの数が不特定で
文字を入力しfile.txtを読み込んで入力した文字と左側の文字が一致した場合
一致した文字の右側の文字を画面に表示させたいのですが
fscanfだと1行目の"a b"内のスペースで変になってしまいます

回答をよろしくお願いします


Blue  2006-01-18 17:33:04  No: 60331

fscanfではなく、fgetsで1行単にに取得したほうが、
その後の文字列の加工等、融通が利きます。


毘沙門天  2006-01-18 22:07:41  No: 60332

一発で取得できるような便利な方法はありませんので、
Blue氏の指摘どおりfgetsで取得して、あとは自分で解析しながら取り込むことになります。
正規表現のライブラリが使えるかもしれません。


FAL  2006-01-18 22:07:46  No: 60333

fgetsで1行読み込んで
1文字ずつ処理で"の1つ目から2つ目まで、3つ目から4つ目までの文字を取り出す感じですね。
分かりました、ありがとうございます。


FAL  2006-01-18 22:11:33  No: 60334

正規表現..調べてみます
ありがとうございました


Blue  2006-01-18 22:19:43  No: 60335

> 正規表現..調べてみます
正規表現のライブラリは
C言語の標準の機能ではないので、注意してください。
VCでCOM等を使えばできるかもしれません。
(使うのは簡単だが、用意するまでがめんどくさいかと)
# boostは別途ダウンロードしなきゃいけないので

"〜" の中身を取得する程度なら、そのようなライブラリを利用せずとも
簡単に実装できると思います。
(文字列を先頭から1文字ずつみて開始位置と終了位置を調べて切り出すだけ)


Ban  2006-01-18 23:31:54  No: 60336

言語標準ではありませんが、
一応VC7にはCAtlRegExpというクラスが予め用意されます。(VC6にはないはず)
#可搬性を考えると微妙かもしれませんが、
#準備や用法はまぁ普通かと。


Ban  2006-01-18 23:35:12  No: 60337

> "〜" の中身を取得する程度なら、そのようなライブラリを利用せずとも
> 簡単に実装できると思います。

御意


FAL  2006-01-19 02:31:05  No: 60338

正規表現はboostのRegex Libraryを使うといいと分かったのですがこれ以上良く分からないので http://www.boost.org/

fgetsで作りました

FILE *fn;
if ((fn=fopen(fname,"rt"))!=NULL)
{
  int wc,cmds,mess;
  char s[225];
  char cmd[225];
  char mes[225];
  while (!feof(fn))
  {
    fgets(s,220,fn);
    wc = 0;
    cmds = 0;
    mess = 0;
    for (int i=0;i<strlen(s);i++){
      if(s[i]=='\"')wc++;
      else
      {
        switch(wc)
        {
          case 1:
          {
            sprintf(cmd+cmds,"%c",s[i]);
            cmds++;
            break;
          }
          case 3:
          {
            sprintf(mes+mess,"%c",s[i]);
            mess++;
            break;
          }
        }
      }
    }
    if (入力文字とcmd比較)
    {
      mesを表示;
      fclose(fn);
      return;
    }
  }
  fclose(fn);
}


FAL  2006-01-19 02:32:57  No: 60339

Blueさん、毘沙門天さん、Banさん
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加