C言語関係掲示板

過去ログ

No.929 ファイルからの特定部分読み込み

[戻る] [ホームページ]
No.11817

ファイルからの特定部分読み込み
投稿者---DA(2004/01/15 18:42:13)


初めまして。

以下のような質問です。


例えば、あるファイルの内容が

......................

.... SUZUKI (0,0) ....

.... TANAKA (0,1) ....

.... SATO (12,0) ....

.... TANAKA (0,1) ....

.... SUZUKI (10,10) ....

.... TANAKA (0,1) ....

.......................



といったとき、"SUZUKI"の( , )内のデータのみを

読み込み、ファイルに出力するにはどうすればよいでしょうか?



アドバイスよろしくお願いします。

No.11820

Re:ファイルからの特定部分読み込み
投稿者---ゆかり(2004/01/15 21:16:50)


全部読みます。
読んだ上で、必要な部分を書き出します。

人間の処理と同じ。


No.11822

Re:ファイルからの特定部分読み込み
投稿者---ともじ(2004/01/15 21:36:40)


>といったとき、"SUZUKI"の( , )内のデータのみを
>読み込み、ファイルに出力するにはどうすればよいでしょうか?

入出力のフォーマットが明確ではありませんが、1行に出てくる
"SUZUKI( , )" は1回限り、()の中は、,で区切られた10進数
と考えた場合です。
    while(fgets(s, sizeof(s), fin) != NULL) {
        if (p = strstr(s, "SUZUKI")) {
            p = strchr(p, '(');
            sscanf(p+1, "%d,%d", &n1, &n2);
            fprintf(fout, "%d %d\n", n1, n2);
        }
    }






No.11824

Re:ファイルからの特定部分読み込み
投稿者---DA(2004/01/15 21:57:09)


>>といったとき、"SUZUKI"の( , )内のデータのみを
>>読み込み、ファイルに出力するにはどうすればよいでしょうか?
>
>入出力のフォーマットが明確ではありませんが、1行に出てくる
>"SUZUKI( , )" は1回限り、()の中は、,で区切られた10進数
>と考えた場合です。
>
    while(fgets(s, sizeof(s), fin) != NULL) {
        if (p = strstr(s, "SUZUKI")) {
            p = strchr(p, '(');
            sscanf(p+1, "%d,%d", &n1, &n2);
            fprintf(fout, "%d %d\n", n1, n2);
        }
    }


>
>
お返事ありがとうございます。

テキストファイルを読み込み、複数の"SUZUKI( , )"から

()内のみ(十進数)を読み込み、テキストファイルに出力、

といったものを考えています。

例えば

---入力ファイル(input.txt)---

SUZUKI(1,2)

TANAKA(1,1)

SUZUKI(2,8)

HARADA(0,5)

SATO (12,6)

SUZUKI(0,21)



---出力ファイル(output.txt)---

12

28

021

といった具合です。



よろしくお願いします。

No.11825

Re:ファイルからの特定部分読み込み
投稿者---かずま(2004/01/15 22:22:30)


    while (fgets(s, sizeof s, fin))
        if (sscanf(s, " SUZUKI (%d ,%d", &n1, &n2) == 2)
            fprintf(fout, "%d %d\n", n1, n2);

これだと、

    SUZUKITA(3,5)
  YASUZUKI ( 7 , 9 )

があっても大丈夫。sscanf の書式の中のスペースは重要です。


No.11826

Re:ファイルからの特定部分読み込み
投稿者---DA(2004/01/15 22:29:49)


>
    while (fgets(s, sizeof s, fin))
        if (sscanf(s, " SUZUKI (%d ,%d", &n1, &n2) == 2)
            fprintf(fout, "%d %d\n", n1, n2);

これだと、

    SUZUKITA(3,5)
  YASUZUKI ( 7 , 9 )

があっても大丈夫。sscanf の書式の中のスペースは重要です。

なるほど、参考になりました。