【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21202

ファイルポジション移動
投稿者---しーげんご(2005/06/01 03:22:26)


テキストモードで開いたファイルのファイルポジションをn行移動するにはどうしたらいいでしょうか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイルポジション移動 21203 あかま 2005/06/01 06:07:36
<子記事> Re:ファイルポジション移動 21204 おでん 2005/06/01 09:33:00
<子記事> Re:ファイルポジション移動 21207 しーげんご 2005/06/01 12:30:07


No.21203

Re:ファイルポジション移動
投稿者---あかま(2005/06/01 06:07:36)


>テキストモードで開いたファイルのファイルポジションをn行移動するにはどうしたらいいでしょうか?
fgetsで一行進むからn回繰り返す。
戻るときはfseekでどうにか'\n'を探すとか。ちょっと難しいかも。


この投稿にコメントする

削除パスワード

No.21206

Re:ファイルポジション移動
投稿者---shu(2005/06/01 10:22:08)


現在の行がわかっていれば、(もしくはあらかじめカウントしておく)
現在の行±nの値を求め、fseek()を使ってファイルの先頭に戻し、
n回fgets()すればいいのではないでしょうか。


この投稿にコメントする

削除パスワード

No.21204

Re:ファイルポジション移動
投稿者---おでん(2005/06/01 09:33:00)


テキストモードでオープンしたファイルは、

「テキストストリームの場合、offsetが0であるか、またはoffsetが同じストリームに
対する以前のftell関数の呼出しで返された値でなければなりません。」
(http://www.bohyoh.com/CandCPP/C/Library/fseek.htmlより引用)

これは、ファイルに格納されている行末文字が"\r\n"(DOS,Windows)
であったり"\n"(UNIX系)であったりするため通常(fgets()など)の見込みでは、
それを"\n"に変換してしまうため実際のファイルに格納されている文字数と、
読み込んだ文字数が違うための制約だと思います。

従って、開業コードが"\r\n"の場合、バイナリでオープンして"\r\n"を
探して移動する。または、一度ファイルをスキャンして行頭の位置を
覚え(ftell())ておくぐらいしか解決策はないと思います。

http://www9.plala.or.jp/sgwr-t/lib/fseek.htmlや
http://www.bohyoh.com/CandCPP/C/Library/fseek.html
あたりを参考にしてみてください。


この投稿にコメントする

削除パスワード

No.21205

まちがい m(_"_)m
投稿者---おでん(2005/06/01 09:34:30)


開業コード->改行コード


この投稿にコメントする

削除パスワード

No.21207

Re:ファイルポジション移動
投稿者---しーげんご(2005/06/01 12:30:07)


いろいろ意見ありがとうございます。

やっぱりfgetsが簡単でしょうか。
でもfgetsだと読み取った文字列の記憶場所や、それを何回も書き換えていくのが無駄かなぁと考えていました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧