ファイル書き込みは通常一番下に書き込まれるのですが、実際に今あるデータの一番下に上書きしたいと考えています。
例)
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でいいんでない?
TStringListさん
返答」ありがとうございます。
Sl.insert(0,'fff'); //一番上にfffを書き込む
Sl.Exchange(0,DataCount); //一番上とファイルの最後のデータと交換
Sl.Delete(0); //一番上のデータ削除
のSlがTstringListです。説明不足ですいませんでした。
すいません。ちなみにですが、
ファイルのデータ数を数える関数DataCount{
Count := 0;
while Not Eof(File) do //File→ファイル名 FileData→ファイルの中身
begin
ReadLn(File,FileData)
Inc(Count);
end;
Result := count; }DataCountここまで
こんなことをしなくてもCount関数を利用すれば済む話ですね...。
SLの最後の行を書き換えたいなら、
SL[SL.Count-1] := '+++++';
固定長なら FileSeek
回答ありがとうございます。
末尾行のチカン さん
SL[SL.Count-1] := '+++++';
でためしてみます。
KHE00221さん
Fileseekは
aaa
bbb
ccc
ddd
eee ←
現在のファイルポインタの部分を
aaa
bbb ←
ccc
ddd
eee
などに変えることができるという認識でいいですよね?
固定長とは'eee'の3文字の固定長ってことでしょうか?
書き込みたいデータが巨大でなければ(メモリー次第)
TStringListなどに入れて読み書きした方が良いかと。
直にファイルをオープンして行う場合はどうしても
Update〜Insert〜Delete など制限が出ます。
>などに変えることができるという認識でいいですよね?
>固定長とは'eee'の3文字の固定長ってことでしょうか?
YES
ツイート | ![]() |