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


pepe  2009-06-19 01: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-19 02:06:34  No: 34849  IP: [192.*.*.*]

TStringListでいいんでない?

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

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

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

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

編集    削除
pepe  2009-06-19 04: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-19 04:33:11  No: 34852  IP: [192.*.*.*]

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

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

固定長なら FileSeek

編集    削除
pepe  2009-06-19 17: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 19:24:00  No: 34855  IP: [192.*.*.*]

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

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

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

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

編集    削除