动态替换文本文件中的内容(200分)

  • 主题发起人 主题发起人 ssabc
  • 开始时间 开始时间
S

ssabc

Unregistered / Unconfirmed
GUEST, unregistred user!
将数据库中查询得到结果替换source文本文件中指定的部分
例如select top(10) from table1
替换前十条记录 $$item1$$...$$item10$$

需要好的算法
包括文本文件的算法
原来使用TMemoryStream结合TTextFile

倾情奉献
 
一个结果存入一个string,再打开文件,写入指定位置。
 
结合Tstrings,TfileStream即可。
procedure TForm3.SpeedButton1Click(Sender: TObject);
var
MyStream:tFileStream;
slist:Tstrings;
stemp:string;
begin
slist:=Tstringlist.Create;
if OpenDialog1.Execute then
Begin
MyStream:=TfileStream.create(OpenDialog1.FileName,fmOpenRead);
try
slist.LoadFromStream(MyStream);
slist.Strings[1]:='what you want replace';
if SaveDialog1.Execute then
slist.SaveToFile(SaveDialog1.FileName);
finally
MyStream.Free;
end;
end;
slist.free;
end;
 
你是否想快速定位文件指针,减少查找和写入次数:
如果数据表中的记录ID不连续,有很快的办法吗?如连续:
用记录ID*每条记录长度,定位指针。如果SELECT的ID号连续,则一次写入即可。
 
函数:
procedure Convert_in_file(filename_nc:PChar;filename_ct:PChar;
needconvert:string;convertto:string);
var t1:TMemoryStream;
i:integer; //used as loop check
n1,n2:integer;
buf1:Word;
Str:string;
Str1,Str2,Str3:String;
file1:TextFile;
begin
t1:=TMemoryStream.Create;
t1.LoadFromFile(filename_nc);
n1:=length(needconvert);

for i:=0 to t1.Size do
begin
t1.read(buf1,1);
Str:=Str+Chr(buf1);
end;
n2:=Pos(needconvert,Str);
Delete(Str,n2,n1);
Insert(convertto,str,n2);

Form1.Memo1.Lines.Add(Str);
t1.Free;
Assignfile(file1,filename_ct);
Reset(file1);
Rewrite(File1);
Write(File1,Str);
Closefile(file1);
end;
调用:
Convert_in_file('my/source.txt','2.txt','$$title$$','hello');
其中source.txt为源文件
2.txt为目标文件
$$title$$为需要替换的部分
hello为替换后的部分

但结果的文本文件中出现莫名其妙的回车符号,望网友指点


 
其实极简单,不要把它复杂化!

ss:array[1..10] of string; //要替换的字符串
rs:array[1..10] of string; //新字符串


var
texts:tstringlist;
begin
texts:=tstringlist.create;
texts.loadfromfile('source.txt');//读文件

for i:=1 to 10 do
StringReplace( texts.text, ss, rs, [rfReplaceAll, rfIgnoreCase])
//StringReplace函数用来替换文本
texts.savetofile('source.txt');//写文件

texts.free;
end;

 
多人接受答案了。
 
后退
顶部