• ベストアンサー

■質問事項

■質問事項  C言語にて、txtファイルを読み込んで検索した文字列が存在した場合、  その行の1行下の行を出力する方法について ■背景  事務系の仕事で、余計なデータが多く含まれるtxtファイルがあります。  そこで、必要なデータだけ出力できるように、C言語にてプログラミング  してみました。  しかし、検索した文字列の存在する行を出力することはできるのですが、  必要なデータは検索した文字列のひとつ下の行にあります。  ポインタに関してはまだ勉強不足な点もあり、  なかなかうまく動作してくれません。  ご教授いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

> ポインタに関してはまだ勉強不足な点もあり、 > なかなかうまく動作してくれません。 どう「うまく動作してくれない」のでしょう? 1行ずつ読み込んで処理するのであれば、既に回答ついていますが… # 書いた回答が「確認する」でトップページに戻って次元の彼方に消えたので # 疑似コードは省略させて貰いますが。今回はテキストエディタで回答作成… ## マイページが教えてgooのトップページになるのが…何回か発生してますが、システムトラブル? 1行ずつでは遅いのでバッファにファイル全体を読み込んでいる… というのであればポインタ関係するかも知れませんが。 1)検索文字列をバッファ中から検索。 2)検索ヒット位置から改行文字が出るまでポインタを進める。 3)改行文字の次の位置を開始位置として記憶する。 4)次の改行文字が出るまでポインタを進める。 5)改行文字の位置を終了位置として記憶する。 6)開始位置から終了位置までを出力。 注意点として「改行」を表す文字が「1文字とは限らない」のと、 「開始位置から終了位置までを出力」をどうやるか…というのが。 改行に関しては環境によって'\r'だったり'\n'だったり、'\r'と'\n'が連続するモノだったりします。 # 無論環境次第で他の場合もあるでしょう。 出力についてはputc()で1文字ずつ出力していく方法もあるでしょうし、 別にバッファを用意してコピーしてからputs()などで出力…というのもあるでしょう。 # printf(buff)では問題がある場合があります。 # printf("%s", buff)で出力しましょう。 ## buffにコピーした内容に"%s"やら"%d"やら変換指定文字列が入っている場合に ## printf(buff)がどういう動作しようとするか…を考えると。

GORI_natukage
質問者

お礼

お礼が遅くなりましてすみません。 時間がなくて、まだ作成できてませんが、 上記のアルゴリズムを参考にさせていただきます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

Cで作ることが目的でないのなら、文字列処理が簡単な他の言語で作るのも手ですよ 例えば、Perlだとの1行をコマンドラインに入力するだけです perl -ne 'if($f) {print;$f=0;} if (/検索する文字列/){$f=1;}' なんたら.txt perlへのPATHが通っているとして。Windowsだったら 'を"に。

GORI_natukage
質問者

お礼

お礼が遅くなりましてすみません。 perlは全く理解してませんでしたが、 上記のコマンドで確かに動作することを確認しました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

・指定した文字列を見付けたらフラグを立てる ・フラグが立っていたら表示して落とす のが簡単かな.

GORI_natukage
質問者

お礼

お礼が遅くなりましてすみません。 フラグ・・・というのがよく分かりませんでしたが、 調べてみます。

関連するQ&A