【请教】改写文本文件中的某一段内容(100分)

  • 主题发起人 主题发起人 meizhou_ren
  • 开始时间 开始时间
M

meizhou_ren

Unregistered / Unconfirmed
GUEST, unregistred user!
本人现在想编写一段代码,改写文本文件中的某一段内容,如指定字符“【start】”和指定字符“【stop】”之间的文本内容,请教大侠如何实现?
因文本文件较大,且访问频繁,不想先使用TString将整个文本文件先读出来再处理。不知道有没有办法直接操作文本文件进行修改。
谢谢!
 
可能另想办法,不过还是要先读出来然后再处理的。
 
同意,不知道能不能多进程同时分割读取替换,类似Flashget的思想
 
或者不要用文本文件,改用数据库,或者别的文件如ini等
 
“【start】”和“【stop】”是独处一行还是与其它的文字混合?
 
“【start】”和“【stop】”是独处一行.

感谢大家的关注!
请大家帮帮忙。
 
----------------------------
来自:huzhicheng, 时间:2006-9-5 14:59:29, ID:3563350
或者不要用文本文件,改用数据库,或者别的文件如ini等
----------------------------
ini文件也是文本文件啊,如果用ini文件如何操作呢?

请指导!
谢谢!
 
逐行读并判断,复制。读到“【start】”后,开始你的操作(写你需要写的内容),然继续读,直到“【stop】”后继续复制原文件。
 
可否考虑把文本文件保存为多个小文件。
 
你记录必须定长,多余的部分用空格或者#0。
 
请大家帮忙看看以下这段代码问题出在哪里,运行后出错。
谢谢!
-----------------------------------------------
procedure TForm1.ReWriteMyTxt;
var
f:TextFile;
bStart,bStop:boolean;
sTempStr,s1:string;
i:integer;
begin
bStart := False;
bStop := False;
AssignFile(f,'./MyText.txt');
Reset(f);
while not seekEoln(f) do
begin
ReadLn(f,sTempStr);
if pos('[start]',sTempStr) <> 0 then bStart := True;
if pos('[stop]',sTempStr) <> 0 then bStop :=True;
if bStart and not bStop then
begin
s1 := mem_RegSet.Lines;
WriteLn(f,s1);
i := i + 1;
end;
if bStop then
begin
closefile(f);
break;
end;
end;
end;
 
procedure TForm1.ReWriteMyTxt;
var
f:TextFile;
bStart,bStop:boolean;
sTempStr,s1:string;
i:integer;
begin
bStart := False;
bStop := False;
AssignFile(f,'./MyText.txt');
Reset(f);
i := 0; //刚才漏了。
while not seekEoln(f) do
begin
ReadLn(f,sTempStr);
if pos('[start]',sTempStr) <> 0 then bStart := True;
if pos('[stop]',sTempStr) <> 0 then bStop :=True;
if bStart and not bStop then
begin
s1 := mem_RegSet.Lines;
WriteLn(f,s1); //运行到这时出错,出错信息为“I/O error 105.”
i := i + 1;
end;
if bStop then
begin
closefile(f);
break;
end;
end;
end;
 
“【start】”和“【stop】”只是一对吧?如果没有其他“【start】”和“【stop】”那么有这样取两个中间部分的函数 上次在CnPack delphi辅助那个东东的源代码看到好象有
我自己是土制函数写的

不过 TString转为string处理 加些回车换行 速度不也是一样?
 
你只打开一个文件读,当然一写就错。应该另外再打开一个文件写。
 
后退
顶部