- ベストアンサー
c言語:ファイルのアクセス場所指定
指定したファイルの中身の、文章の最後の8行を、出力ファイルに書き出すプログラムを作っています。 まず、fseek(file_p, -1, SEEK_END);でファイルの読み込み位置を一番最後にして、そこからループで8行分を数え、8行目の最初から書き出していけるようにしたいのですが、ループ処理の方法がわかりません。 どうしたら最後から8行を数えることができますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
tailを使えばいいのに、というかtailのソースを参考にすればいいと思うけど。 処理としてはループバックしながらファイルポインタを移動し、9個目の改行(処理系がわからないので、LFかCRのいずれか)を見つけたら、その手前からEOFまでもう一度転送し直すだけだと思いますよ。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
回答No.3
テキストストリームに対してfseek関数でSEEK_ENDを指定する場合、オフセットは0でなければなりません。(JIS X3010:2003 7.19.9.2 fseek関数参照) 言い換えれば、SEEK_ENDを使えるのは追記する場合だけです。 今回の場合、少なくとも標準の範囲においては、ファイルの先頭から順に読んでいくしか方法はありません。
- nitscape
- ベストアンサー率30% (275/909)
回答No.2
ファイルの先頭からどんどん読んでいって、最後の8行を取り出すプログラムを作ることはできますか? ファイルの最後からループでというのはいい方法だと思いますし、実際にプログラムを組むのでしたらそうしたほうがいいと思います。しかしまずは基本から学んだ方がいいと思います。そうすればループをどうすればいいのか答えが見つかるかと思います。