标题
第一行内容
第二行内容
第三行内容
。。。。。
第九百行内容
结尾
现在想将该文本文件的内容分批读出,然后分批存入到另外一个文本文件,第1次先读出第一行到第三百行的内容,然后将这三百行的内容先写入到第一个文本文件,然后继续从301行继续读,将301行到第6百行的内容写入到第二个文本文件,然后从601行的内容开始读,将601行到第900行内容写入到第三个文本文件,请各位朋友给一个思路,应该怎样实现,请各朋友赐教,衷心谢谢!
最后想要的三个文本文件内容如下 :
文件1:
标题
第1行
第2行
。。。
第300行
结尾
文件2:
标题
第301行
第302行
。。。
第600行
结尾
文件3:
标题
第601行
第602行
。。。
第900行
结尾
8 个解决方案
#1
逐行读取文本文件,这是以前为另一个网友写的,你可以参考一下
procedure TForm1.Button3Click(Sender: TObject);
var
fl:TextFile;
path,s:string;
str:string;
i,j,m,n:Integer;
b:Boolean;
begin
path:=ExtractFilePath(Application.ExeName);
AssignFile(fl,path+'text.txt');
Reset(fl);
//逐行读文本文件,************************************************************
repeat
Readln(fl,str);//读取文本文件当前行内容,开始是第一行,然后逐行读取
i:=Pos('XX-ClientMac:',str);//子串在字符串中的位置,大于0说明找到子串,否则无匹配的子串
if i>0 then//有匹配的子串
begin
s:=Copy(str,i+length('XX-ClientMac:'),Length(str)-i-length('XX-ClientMac:')+1);//读取字符串中子串后的内容,就是你要的IP地址
end
else//没有匹配的子串
begin
i:=Pos('XX-ServerMac:',str);//另一子串在字符串中的位置,大于0说明找到子串,否则无匹配的子串
if i>0 then
begin
s:=Copy(str,i+length('XX-ServerMac:'),Length(str)-i-length('XX-ServerMac:')+1);//读取字符串中子串后的内容,就是你要的IP地址
end
end;
until
SeekEof(fl);//文本文件读取完成(英文解释:Returns the end-of-file status of a file, ignoring whitespace.)
CloseFile(fl);
//self.MaskEdit1.EditMask
end;
#2
写文本文件,这是以前自己程序里的一段代码,可以参考
然后,通过一个变量,记录读取行数,实现每300行写入一个新文本文件就ok了
//将一些报文保存到文本文件中,便于调试时使用***********************************
procedure Tw_zjm.writefile_pro(name, content: string);
var
fl:TextFile;
k:integer;
begin
if not fileexists(name) then
begin
k:=filecreate(name);
if k>0 then
begin
fileclose(k);
assignfile(fl,name);
append(fl);
writeln(fl,datetimetostr(now)+':');
writeln(fl,content);
closefile(fl);
end;
end
else
begin
assignfile(fl,name);
append(fl);
writeln(fl,datetimetostr(now)+':');
writeln(fl,content);
closefile(fl);
end;
end;
//****************************************************************************
然后,通过一个变量,记录读取行数,实现每300行写入一个新文本文件就ok了
#3
楼上的朋友,先试一下,谢谢了,也希望其它朋友能提供自己的思路,一起互相交流,谢谢
#4
請自行測試
procedure TForm1.Button3Click(Sender: TObject);
var
Atext,btext:tstringlist;
i:integer;
begin
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then begin
atext:=Tstringlist.Create;
btext:=Tstringlist.Create;
atext.LoadFromFile(OpenDialog1.FileName);
btext.Add('標題1');
FOr i:=0 to atext.Count-1 do begin
if (i mod 300 =0) and (i>0) then begin
btext.SaveToFile('標題'+floattostr(i/300));
btext.Clear;
btext.Add('標題'+floattostr(i/300+1));
end else
btext.Add(atext[i]);
end;
atext.Free;
btext.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Atext,btext:tstringlist;
i:integer;
begin
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then begin
atext:=Tstringlist.Create;
btext:=Tstringlist.Create;
atext.LoadFromFile(OpenDialog1.FileName);
btext.Add('標題1');
FOr i:=0 to atext.Count-1 do begin
if (i mod 300 =0) and (i>0) then begin
btext.SaveToFile('標題'+floattostr(i/300));
btext.Clear;
btext.Add('標題'+floattostr(i/300+1));
end else
btext.Add(atext[i]);
end;
atext.Free;
btext.Free;
end;
end;
#5
楼上的两位大虾,假如我的文本文件大概有4到6万行左右,这样读入的话,速度感觉实在太慢了,请问有没有一种比较快速的方法来读入带有几万行的文本文件,因为小弟的目的很简单,就是将三百行的内容写一个文件,平均下来,几万行,大概有一百多个文本文件左右,请楼上的两位大虾再次赐教,希望能帮忙提供一种快速的读写方法,谢谢
#6
把文本文件先load到memo中,然后再对memo操作。memo不能设置成自动换行,否则就与文本文件的行数不一致了。
#7
200W行也就在百秒左右,幾W能花多少時間?你希望有多快啊!
#8
衷心感谢楼上的各位朋友!
#1
逐行读取文本文件,这是以前为另一个网友写的,你可以参考一下
procedure TForm1.Button3Click(Sender: TObject);
var
fl:TextFile;
path,s:string;
str:string;
i,j,m,n:Integer;
b:Boolean;
begin
path:=ExtractFilePath(Application.ExeName);
AssignFile(fl,path+'text.txt');
Reset(fl);
//逐行读文本文件,************************************************************
repeat
Readln(fl,str);//读取文本文件当前行内容,开始是第一行,然后逐行读取
i:=Pos('XX-ClientMac:',str);//子串在字符串中的位置,大于0说明找到子串,否则无匹配的子串
if i>0 then//有匹配的子串
begin
s:=Copy(str,i+length('XX-ClientMac:'),Length(str)-i-length('XX-ClientMac:')+1);//读取字符串中子串后的内容,就是你要的IP地址
end
else//没有匹配的子串
begin
i:=Pos('XX-ServerMac:',str);//另一子串在字符串中的位置,大于0说明找到子串,否则无匹配的子串
if i>0 then
begin
s:=Copy(str,i+length('XX-ServerMac:'),Length(str)-i-length('XX-ServerMac:')+1);//读取字符串中子串后的内容,就是你要的IP地址
end
end;
until
SeekEof(fl);//文本文件读取完成(英文解释:Returns the end-of-file status of a file, ignoring whitespace.)
CloseFile(fl);
//self.MaskEdit1.EditMask
end;
#2
写文本文件,这是以前自己程序里的一段代码,可以参考
然后,通过一个变量,记录读取行数,实现每300行写入一个新文本文件就ok了
//将一些报文保存到文本文件中,便于调试时使用***********************************
procedure Tw_zjm.writefile_pro(name, content: string);
var
fl:TextFile;
k:integer;
begin
if not fileexists(name) then
begin
k:=filecreate(name);
if k>0 then
begin
fileclose(k);
assignfile(fl,name);
append(fl);
writeln(fl,datetimetostr(now)+':');
writeln(fl,content);
closefile(fl);
end;
end
else
begin
assignfile(fl,name);
append(fl);
writeln(fl,datetimetostr(now)+':');
writeln(fl,content);
closefile(fl);
end;
end;
//****************************************************************************
然后,通过一个变量,记录读取行数,实现每300行写入一个新文本文件就ok了
#3
楼上的朋友,先试一下,谢谢了,也希望其它朋友能提供自己的思路,一起互相交流,谢谢
#4
請自行測試
procedure TForm1.Button3Click(Sender: TObject);
var
Atext,btext:tstringlist;
i:integer;
begin
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then begin
atext:=Tstringlist.Create;
btext:=Tstringlist.Create;
atext.LoadFromFile(OpenDialog1.FileName);
btext.Add('標題1');
FOr i:=0 to atext.Count-1 do begin
if (i mod 300 =0) and (i>0) then begin
btext.SaveToFile('標題'+floattostr(i/300));
btext.Clear;
btext.Add('標題'+floattostr(i/300+1));
end else
btext.Add(atext[i]);
end;
atext.Free;
btext.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Atext,btext:tstringlist;
i:integer;
begin
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then begin
atext:=Tstringlist.Create;
btext:=Tstringlist.Create;
atext.LoadFromFile(OpenDialog1.FileName);
btext.Add('標題1');
FOr i:=0 to atext.Count-1 do begin
if (i mod 300 =0) and (i>0) then begin
btext.SaveToFile('標題'+floattostr(i/300));
btext.Clear;
btext.Add('標題'+floattostr(i/300+1));
end else
btext.Add(atext[i]);
end;
atext.Free;
btext.Free;
end;
end;
#5
楼上的两位大虾,假如我的文本文件大概有4到6万行左右,这样读入的话,速度感觉实在太慢了,请问有没有一种比较快速的方法来读入带有几万行的文本文件,因为小弟的目的很简单,就是将三百行的内容写一个文件,平均下来,几万行,大概有一百多个文本文件左右,请楼上的两位大虾再次赐教,希望能帮忙提供一种快速的读写方法,谢谢
#6
把文本文件先load到memo中,然后再对memo操作。memo不能设置成自动换行,否则就与文本文件的行数不一致了。
#7
200W行也就在百秒左右,幾W能花多少時間?你希望有多快啊!
#8
衷心感谢楼上的各位朋友!