- ベストアンサー
■質問事項
■質問事項 C言語にて、txtファイルを読み込んで検索した文字列が存在した場合、 その行の1行下の行を出力する方法について ■背景 事務系の仕事で、余計なデータが多く含まれるtxtファイルがあります。 そこで、必要なデータだけ出力できるように、C言語にてプログラミング してみました。 しかし、検索した文字列の存在する行を出力することはできるのですが、 必要なデータは検索した文字列のひとつ下の行にあります。 ポインタに関してはまだ勉強不足な点もあり、 なかなかうまく動作してくれません。 ご教授いただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ポインタに関してはまだ勉強不足な点もあり、 > なかなかうまく動作してくれません。 どう「うまく動作してくれない」のでしょう? 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)がどういう動作しようとするか…を考えると。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
Cで作ることが目的でないのなら、文字列処理が簡単な他の言語で作るのも手ですよ 例えば、Perlだとの1行をコマンドラインに入力するだけです perl -ne 'if($f) {print;$f=0;} if (/検索する文字列/){$f=1;}' なんたら.txt perlへのPATHが通っているとして。Windowsだったら 'を"に。
お礼
お礼が遅くなりましてすみません。 perlは全く理解してませんでしたが、 上記のコマンドで確かに動作することを確認しました。
- Tacosan
- ベストアンサー率23% (3656/15482)
・指定した文字列を見付けたらフラグを立てる ・フラグが立っていたら表示して落とす のが簡単かな.
お礼
お礼が遅くなりましてすみません。 フラグ・・・というのがよく分かりませんでしたが、 調べてみます。
お礼
お礼が遅くなりましてすみません。 時間がなくて、まだ作成できてませんが、 上記のアルゴリズムを参考にさせていただきます。