如何从多种结构的TXT文件中提取数据到不同的文本文件中。 (100分)

M

mondelo

Unregistered / Unconfirmed
GUEST, unregistred user!
请教如何从一个多种结构的文本件中,取出一些数据到相应的文本件中。
 
我用Writeln和Readln自己解了,可不可把分收回?
 
具体一点,文本文件用 TStrings 应该很好操作的。
 
多谢你的提点,原本帖子是很祥细,但在这里摆了两个星期也无人问津,结果还是自己苦苦想通了。
是这样的,有个文本文件ABC.txt如下:
--------------------- 小二 --------------------
一项 二项 三项 四项 五项
1234 38348934 347189324 A34879347 34343.00
1234 34343434 434234343 A34343444 34343.33
1234 58479847 343423843 A43748942 34343.35
款项一 款项二 款项三 合计
3423455 3434244 434234342 3434242.34
--------------------- 李四 ----------------------
一项 二项 三项 五项
1234 873947234 3843942433 B347839479344
1234 342847293 3434928783 B479823472942
款项一 款项二 款项三 合计
48473984 398472947 384923473 897433.98
------------------- 张三 ----------------------
一项 二项 三项 六项
1234 472347923 847893792 C479384794234
1234 384729424 394792422 C894792384294
款项一 款项二 款项三 合计
3434234 3934242444 38947924242 94803.00
现将数据分别取到三个文件中
关于小二的 A.txt数据内容是
1234 38348934 347189324 A34879347 34343.00
1234 34343434 434234343 A34343444 34343.33
1234 58479847 343423843 A43748942 34343.35
关于李四的B.txt数据内容是
1234 873947234 3843942433 B347839479344
1234 342847293 3434928783 B479823472942
关于张三的C.txt数据内容是
1234 472347923 847893792 C479384794234
1234 384729424 394792422 C894792384294
后来我主要用readln、writeln和pos,加循环用pos先找‘A’找到整行写到A.txt
....
While not Eof(nh1)do
begin
readln(nh1,rmb1);
if pos('A',rmb1)>0 then
Writeln(f1rmb,rmb1);
end;
......
如此以字符A,B,C为标识,将数据写到相应的文本件中。
不知jsxjd用TStrings具体怎样实现,delphi的字符操作似乎很强!
不过令我吐血的是,我辛辛苦苦写了出来,电脑主管却用了句‘不知你的程序适应性如何,我们不能用。’
完全不尊重他人的劳动,我心想‘你懂个屁!’,唉,不知这是什么世道。
 
我不知道你的文件名 a.txt b.txt c.txt 是从 abc.txt 分解来的,
还是从 A34879347 B347839479344 等的首字符获得的。
程序如下已测试通过:
procedure TForm1.Button1Click(Sender: TObject);
var
sL,sLT,sLS:TStrings;
i:integer;
fName:string;
begin
sL:=TStringList.Create ;
sLT:=TStringList.Create ;
sLS:=TStringList.Create ;
try
sL.LoadFromFile('D:/ABC.txt');
for i:=sl.Count-1do
wnto 0do
begin
if pos('合计',sL)>0 then
begin
sL.Delete(i+1);
sL.Delete(i);
continue;
end;
if pos('----',sL)>0 then
begin
sL.Delete(i+1);
continue;
end;
if trim(sL)='' then
sL.delete(i);
end;

for i:=0 to sl.Count-1 do
begin
if (pos('----',sL)=0) then
SLS.Add(SL);
if (pos('----',sL)>0) or (i=sl.Count-1) then
begin
if i>0 then
begin
sLT.CommaText:=sLS[0];
fname:=copy(sLT[3],1,1);
fname:='d:/'+fname+'.txt';
SLS.SaveToFile(fname);
end;
sLs.clear;
end ;
end;
except
showmessage('文件格式不正确!');
end;
sl.free;
slt.free;
sls.free;
end;

调试文件 abc.txt
--------------------- 小二 --------------------
一项 二项 三项 四项 五项
1234 38348934 347189324 A34879347 34343.00
1234 34343434 434234343 A34343444 34343.33
1234 58479847 343423843 A43748942 34343.35
款项一 款项二 款项三 合计
3423455 3434244 434234342 3434242.34
--------------------- 李四 ----------------------
一项 二项 三项 五项
1234 873947234 3843942433 B347839479344
1234 342847293 3434928783 B479823472942
款项一 款项二 款项三 合计
48473984 398472947 384923473 897433.98
------------------- 张三 ----------------------
一项 二项 三项 六项
1234 472347923 847893792 C479384794234
1234 384729424 394792422 C894792384294
款项一 款项二 款项三 合计
3434234 3934242444 38947924242 94803.00
 
多谢jsxjd的指导。
 
顶部