秘密基地、どこに作った?

C言語初級者です。

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

処理系はCygwinを使っています。
ファイルには五千行程度のデータが書いてあります。

A 回答 (2件)

「指定した行のデータを書き換える」というのがちょっと気になるのですが、


書き換え前後で行の長さが同じでない限り、ファイルのその部分だけ書き換えて終わり
というわけにはいきません。

簡単に書くなら、

1) 書き換え対象のファイルを読み込み用にオープン
2) 新しいファイルを書き出し用にオープン
3) 読み込みファイルから一行読み込む
4) 読み込んだ行が書き換え対象の行なら
4.1)行を書き換える
5) 行を出力ファイルに書き出し
6) 読み込みファイルの終端に達するまで 3 ~ 5 を繰り返し。

のようになります。

結果が得られればいいのなら、わざわざCで組まないでPerl/sed/awkを
使うのが楽でいいと思います。

この回答への補足

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

補足日時:2006/12/10 02:12
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/10 02:37

仕事目的なら、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プログラミングの参考書にお金を使う事を考慮したほうが良いです。自分に投資。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/10 02:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報