C言語関係掲示板

過去ログ

No.513.ファイル中の文字列を消す

[戻る] [ホームページ]
No.3979

文字列を消す
投稿者---たか(2002/12/21 18:44:59)



ファイルの中の文字列を消したくて ’ ’スペースを書き込んでいるのですが
それだと,ファイルのサイズが全くかわりません.
空白という文字を書き込んでいるから当然なのかもしれません.
どうかファイル中の文字列を消して,ファイルのサイズを小さくする方法がありました教えてください

No.3980

Re:(ファイル中の)文字列を消す
投稿者---kikk(2002/12/21 22:31:12)


ども。


3通りくらい方法があります。

・その1
既存のファイルと重複しない名前のファイルを書き込みモードで開き、
そこに元のファイルのスペース以外の文字を全部書き込んだ後、ファイルを
閉じ、元のファイルをremove()し、新しく作ったファイルを元のファイルの
名前にrename()する。

・その2
ファイルを読み書きモードで開き、ファイルの内容を全部メモリに読んだ後
に、rewind()し、スペースの数を数えつつスペース以外の文字を書き込んで
いき、そのあとに(fflush()し、)ftruncate()やchsize()といった(非標準な)
関数でスペースの分だけサイズを切り詰める。
# メモリをどう確保するかがちょっとした問題ではありますが。。

・その3
ファイルを読み書きモードで開き、先頭からスペースを探しつつ、読んでは
書くのを繰り返す。書き込む場所は既出のスペースの分だけ前にずらすこと
(fseek()かfgetpos()&fsetopos()を使い、読み位置と書き位置を個別管理
する)。最後に、その2と同様に切り詰める。

なお、書いてある順番はおすすめ順ですが、メモリやディスクに制限がある
場合は適宜吟味してください。

あと、過去ログのレコード操作系の書き込み(レコード削除)が参考になると
思います。たぶん。。


では。

No.3981

Re:(ファイル中の)文字列を消す
投稿者---kikk(2002/12/21 22:36:37)


ども。


すみません。空白を削るのとなぜか勘違いしてました。
"スペース"を"文字列"に読み替えてください(だいたい意味は通るはず)。


では。