[PHP-users 20319]Re: テキストファイルへの挿入書き込み

Kazumasa Gotoh kgotoh @ cic-kk.co.jp
2004年 2月 9日 (月) 06:44:05 JST


From: Norio TOMITA <walkup @ ya.sunnyday.jp>
Date: Mon, 09 Feb 2004 01:06:55 +0900

>  このファイル上のデータを1行だけ修正したい場合、どの様に行え
>  ば良いでしょうか。書店に並ぶ本達には、カウンタの様に上書きで
>  済むものか、ログの様に追記で済むものしかなく、特定の一行だけ
>  修正して書き込み直す方法がありません。

一般に、SAM ファイルに対して途中のレコードの書き換え… つまり
上書きを行えるのは、当該レコード長が変らない場合だけです。

したがって、固定長レコードであれば任意の書き換えは可能ですが、
1行の長さがそれぞれ異なる様な可変長レコードでは原則的に
書き換えは不可能です。
これは、ファイルの記録形式を考えれば、自明の事となります。

例えばテキストエディタは、ファイルを自分の管理するバッファ上
(その形式は様々ですが)に原則として全て読み込み、修正後に
書き戻す場合は、全てのデータの再出力を行っています。

>  csv全てを一旦全部配列に保存して、その一部を修正し、またファイ
>  ルに保存し直す様な事をしなければならないのでしょうか?

まぁそういう事ですが、その用途であれば「一旦全部配列に保存」
する必要はないでしょう。
修正対象行以外に用はないので、1行読み込んだらすぐに書き出し、
修正対象行は修正後に書き出すようにすれば、バッファは 1行分で
済みます。ふつうはこうしますね。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh @ cic-kk.co.jp


PHP-users メーリングリストの案内