• ベストアンサー

C言語でのファイルのデータ更新について

C言語初級者です。 1行単位でデータが書いてあるファイルで、指定した行のデータを書き換えるようなプログラムはどのように記述すればよいのでしょうか。 必要な関数、処理の仕方など教授していただければと思います。 処理系はCygwinを使っています。 ファイルには五千行程度のデータが書いてあります。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

「指定した行のデータを書き換える」というのがちょっと気になるのですが、 書き換え前後で行の長さが同じでない限り、ファイルのその部分だけ書き換えて終わり というわけにはいきません。 簡単に書くなら、 1) 書き換え対象のファイルを読み込み用にオープン 2) 新しいファイルを書き出し用にオープン 3) 読み込みファイルから一行読み込む 4) 読み込んだ行が書き換え対象の行なら 4.1)行を書き換える 5) 行を出力ファイルに書き出し 6) 読み込みファイルの終端に達するまで 3 ~ 5 を繰り返し。 のようになります。 結果が得られればいいのなら、わざわざCで組まないでPerl/sed/awkを 使うのが楽でいいと思います。

tukiyubi
質問者

お礼

回答してくださった内容を読み違えており補足を書いた後に気が付きました。 新しいファイルに書き写していくやり方は考えてませんでした。 回答ありがとうございました!

tukiyubi
質問者

補足

自分でどこまでできたのか明示してなくすいませんでした。 ご回答の 4.1) の処理の仕方が質問の目的でした。 宜しくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

仕事目的なら、sedやperlスクリプトを使ったほうが手っ取り早いかも。 こんな感じ(ファイルa.txtの4行目をtestに置き換える。排他制御は考えない): perl -i.bak -pe 'BEGIN{$l=shift;$s=shift};$_=$s.$/ if $. == $l' 4 test a.txt 目的がCプログラムの勉強なら、fopen/fgets/fputsの使い方を理解していれば難しくないと思います。perlで書いたのと処理速度がそんなに変わらないかもしれませんが。 mmapして一気に移動させたりすれば多少速いかも。 逆に「fopen? 食べた事ない」とかいう話なら、Cプログラミングの参考書にお金を使う事を考慮したほうが良いです。自分に投資。

tukiyubi
質問者

お礼

回答ありがとうございました。 今回はもうCでやり通しますが時間を見つけてperlを勉強してみようと思います。

すると、全ての回答が全文表示されます。

関連するQ&A