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


pepe  2009-06-19 01:58:55  No: 34848

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

例)
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

TStringListでいいんでない?


pepe  2009-06-19 04:02:41  No: 34850

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

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

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


pepe  2009-06-19 04:13:39  No: 34851

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

ファイルのデータ数を数える関数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

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


KHE00221  2009-06-19 12:15:56  No: 34853

固定長なら FileSeek


pepe  2009-06-19 17:59:28  No: 34854

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

末尾行のチカン さん
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

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

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


KHE00221  2009-06-19 19:59:03  No: 34856

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加