ファイルの書き込みに関して質問です


pepe  2009-06-18 16:58:55  No: 34848  IP: 192.*.*.*

ファイル書き込みは通常一番下に書き込まれるのですが、実際に今あるデータの一番下に上書きしたいと考えています。

例)
aaa
bbb
ccc
ddd
eee ←このeeeをfffに変えたい。
←通常はここに書き込む


私が今考えているやり方です↓

ファイルのデータ数を数える関数DataCount{
Count := 0;

while Not Eof(File) do  //File→ファイル名  FileData→ファイルの中身
begin
  ReadLn(File,FileData)
  Inc(Count);
end;

Result := count;          }DataCountここまで



Sl.insert(0,'fff');       //一番上にfffを書き込む
Sl.Exchange(0,DataCount); //一番上とファイルの最後のデータと交換
Sl.Delete(0);             //一番上のデータ削除


こんな感じで考えていますが、もっとすっきりするやり方や簡単な方法ありますでしょうか?
よろしくお願いします。

編集 削除
TStringList  2009-06-18 17:06:34  No: 34849  IP: 192.*.*.*

TStringListでいいんでない?

編集 削除
pepe  2009-06-18 19:02:41  No: 34850  IP: 192.*.*.*

TStringListさん
返答」ありがとうございます。

Sl.insert(0,'fff');       //一番上にfffを書き込む
Sl.Exchange(0,DataCount); //一番上とファイルの最後のデータと交換
Sl.Delete(0);             //一番上のデータ削除

のSlがTstringListです。説明不足ですいませんでした。

編集 削除
pepe  2009-06-18 19:13:39  No: 34851  IP: 192.*.*.*

すいません。ちなみにですが、

ファイルのデータ数を数える関数DataCount{
Count := 0;

while Not Eof(File) do  //File→ファイル名  FileData→ファイルの中身
begin
  ReadLn(File,FileData)
  Inc(Count);
end;

Result := count;          }DataCountここまで

こんなことをしなくてもCount関数を利用すれば済む話ですね...。

編集 削除
末尾行のチカン  2009-06-18 19:33:11  No: 34852  IP: 192.*.*.*

SLの最後の行を書き換えたいなら、
SL[SL.Count-1] := '+++++';

編集 削除
KHE00221  2009-06-19 03:15:56  No: 34853  IP: 192.*.*.*

固定長なら FileSeek

編集 削除
pepe  2009-06-19 08:59:28  No: 34854  IP: 192.*.*.*

回答ありがとうございます。

末尾行のチカン さん
SL[SL.Count-1] := '+++++';
でためしてみます。

KHE00221さん
Fileseekは
aaa
bbb
ccc
ddd
eee ←

現在のファイルポインタの部分を
aaa
bbb  ←
ccc
ddd
eee 
などに変えることができるという認識でいいですよね?
固定長とは'eee'の3文字の固定長ってことでしょうか?

編集 削除
結局・・  2009-06-19 10:24:00  No: 34855  IP: 192.*.*.*

書き込みたいデータが巨大でなければ(メモリー次第)
TStringListなどに入れて読み書きした方が良いかと。

直にファイルをオープンして行う場合はどうしても
Update〜Insert〜Delete など制限が出ます。

編集 削除
KHE00221  2009-06-19 10:59:03  No: 34856  IP: 192.*.*.*

>などに変えることができるという認識でいいですよね?
>固定長とは'eee'の3文字の固定長ってことでしょうか?
YES

編集 削除