[PHP-users 15022]Re: ファイル操作
NAKAMURA Takeshi
1yen @ sh.rim.or.jp
2003年 5月 2日 (金) 19:33:04 JST
仲村です
From: "fujio" <furumeta @ hotmail.com>
Date: Fri, 2 May 2003 17:38:37 +0900
Subject: [PHP-users 15013] Re: ファイル操作
> しかし、この行だけを編集する場合、ファイルの行数目を割り出し、その行だけを上
> 書き編集をかければよろしいのでしょうか?
ファイルはディスクの上に書かれていて
====
ABCD
abcd
12345
====
というファイルがあるとディスク上のデーターは(* を改行として表すと)
ABCD*abcd*12345*
と、なります。そして「ABCD」の行を「ABCDEF」と書き換えると
ABCDEF*cd*12345*
となり、次の行の頭を書き潰してしまいます。
書き潰さないためには、後ろにあるデータ全てを追加する文字分後ろに
送らなければいけません。
==> 追加する文字より後ろにあるデータを全て読んでメモリへ退避
文字を追加 読んだ文字を後ろに書くことになります。
これを、汎用の関数として 例えば1万行のファイル 各行の先頭に
1文字追加を行うと、トータルでどの程度のデータを読んで書くことに
なるでしょう。ファイルサイズの数十倍,数百倍となり、非現実的で
あると思いませんか?
と、いうことで通常ファイルを編集する関数は通常用意されていません。
# エディタは、摩訶不思議なことをして(メモリ上ですが)ブロック転送を
# 行わずに済むように作られているそうです。
# (あるいは、1行の文字数を制限して行数をキーにしたランダムアクセス)
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
仲村 武 <1yen @ sh.rim.or.jp>
ディスクコントローラーに LDDR/LDIR の様なブロック転送命令が実装されていれば
あるいは...いや、やはり時間がかかりすぎるだろうな
PHP-users メーリングリストの案内