高手指点,取出文本文件中的有效数据另存temp.txt? (100分)

  • 主题发起人 主题发起人 joann
  • 开始时间 开始时间
J

joann

Unregistered / Unconfirmed
GUEST, unregistred user!
文本文件如下:
会计科目: 0001
===================================================================
客户名称 贷款帐号 合同号
-------------------------------------------------------------------
华小二 103035500100000079 019905500001600
何瑟 103035500100000078 019905500000500
...................
曹夹英 103035500100000176 019905500000900
-------------------------------------------------------------------
本页笔数: 45 本页金额: 2,950,033.15
-------------------------------------------------------------------



会计科目: 0002
===================================================================
客户名称 贷款帐号 合同号
-------------------------------------------------------------------
贺晓 103035500100000021 019905500001901
倪任尧 103035500100000004 019905500000101
..................
郑何方 103035500100000068 019905500000201
-------------------------------------------------------------------
本页笔数: 38 本页金额: 22,504,728.81
-------------------------------------------------------------------



会计科目: 0003
===================================================================
客户名称 贷款帐号 合同号
-------------------------------------------------------------------
李茜 103035500100000123 019905500001100
...................
万森林 103035500100000254 019905500001200
林国美 103035500100000085 019905500001300
-------------------------------------------------------------------
本页笔数: 27 本页金额: 22,504,728.81
-------------------------------------------------------------------



会计科目: 0002
===================================================================
客户名称 贷款帐号 合同号
-------------------------------------------------------------------
张望人 103035500100000023 019905500002800
何其一 103035500100000034 019905500004500
...................
赵达标 103035500100000045 019905500003500
-------------------------------------------------------------------
本页笔数: 46 本页金额: 22,504,728.81
-------------------------------------------------------------------

将中的数据取出另存temp.txt如下:
贺晓 103035500100000021 019905500001901
倪任尧 103035500100000004 019905500000101
..................
郑何方 103035500100000068 019905500000201
张望人 103035500100000023 019905500002800
何其一 103035500100000034 019905500004500
...................
赵达标 103035500100000045 019905500003500

如何写?
 
用readln一句句读出来,分析后
再用writeln写到新文件。
 
分析一下,对你来说有用的那一行都含有"1030355001"吧 ?
procedure getDate;
var
strlst: TStringlist;
i: integer;
begin
strlst := TStringlist.Create;
strlst.LoadFromFile('c:/未处理的数据.txt');
for i := 0 to strlst.count -1 do
begin
if pos('1030355001',strlst)= 0 then
strlst.Delete(i); //删了不含1030355001的行
end;
strlst.SaveToFile('c:/处理好的数据.txt');
strlst.free;
end;
 
先用字符串列表读出来
List:TStringList
List.LoadFromFile('C:/123.Txt')
一行一行的册
for I:=0 to List.count-1 do
if Pos('-------', List.Strings) or Pos('=========', List.Strings) or ('本页笔数', List.Strings) or....
then List.Delete(I)
List.SaveToFile('C:/234.txt')
 
To一少, 我可能说的不清楚, 是取出" 会计科目: 0002 " 中的数据而不是全部.
 
每人回答,是不是太难了?
 
注意:"本页笔数"是变数(任意值)
 
我不清楚你的编号是不是按顺序来的,如果是,取出0002和0003之间的数据,再用我上面的代码对
取出的数据进行处理;
如果不是按顺序来的,而且后面还有很多 "会计科目: 0002" 这样开头的数据 ,我觉得要做的
就是取出"会计科目: 0002"后面的数据,当然不是全部,在后面的 不等于 "会计科目: 0002" 且
含有 "会计科目"的那一行停止取数据

会计科目: 0002 //这行有 "会计科目: 0002"
===============
//这里是要的数据吧?
会计科目: 0004 //这行 <> "会计科目: 0002" and 含有 "会计科目"
===============

说得有点乱,我的思路就这个,不知能不能让你明白,另申明,本人菜鸟一个, 不怕麻烦加我qq:222428
 
这个比较烦琐,慢慢来。
 
这个极其简单:
1. 读一行
2.如行中有“会计科目: 0002”,跳过3行表头,开始写入,否则丢弃,转1。
3.如果读入的是 “-------------------------------------------------------------------”
停止写入,
4.如果文件没结束,转1
 
To stlont,
本人菜鸟一个,您说的原理我知道,但不知道如何写.
 
我上次给的程序是有效的,请试一下。
 
呵呵,按照你上面的图示,给分吧朋友 [:D]

procedure FormatTextFile;//格式化文本文件
var
f,f0:tstringlist;
i,j:integer;
begin
f:=tstringlist.create;
f0:=tstringlist.create;
f.loadfromfile('文本文件.txt');
j:=0;
for i:=f.indexof('会计科目: 0002') to f.count-1 do
if not(f[1] in ('-','=',' ')) then
f0.add(f)
else
begin
if f[1]='-' then inc(j);
if j>2 then break;
end;
f0.savetofile('temp.txt');
f.free;
f0.free;
end;
 
读if not(f[1] in ('-','=',' ')) then
f0.add(f)时
报错:
[Error] Unit1.pas(36): ')' expected but ',' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
修改if not(f[1] in ('-','=',' ')) then
f0.add(f)
为:
if not(f[1] in ['-','=',' ']) then
f0.add(f)
在试看看。。
 
谢谢ArJianzeng:
运行通过,但读文件出错:"list index out of bounds(-1)"
 
procedure FormatTextFile;//格式化文本文件
var
File1,File2:TextFile;
Strtemp:String;
begin
AssignFile(File1,'文本文件.txt');
reset(File1);
AssignFile(File2,'temp.txt');
if FileExists('temp.txt') then Append(File2)
else Rewrite(File2);
while not Eof(File1) do
begin
readln(File1,StrTemp);
if Pos('103035500',StrTemp)<>0 then
begin
Writeln(File2,StrTemp);
end;
end;
CloseFile(File2);
CloseFile(File1);

end;
 
呵呵,我不小心给打错了~;)

你说的那个错误("list index out of bounds(-1)"),估计是这个问题:

f.indexof('会计科目: 0002')
————————
|
必须和你要去的那行完全相同,如果后面有空格也必须加上

如果这样你觉得麻烦也可以改改》》

procedure FormatTextFile;//格式化文本文件
var
f,f0:tstringlist;
i,j:integer;
b:boolean;
begin
f:=tstringlist.create;
f0:=tstringlist.create;
f.loadfromfile('文本文件.txt');
j:=0;
b:=false;
for i:=0 to f.count-1 do
begin
if b then
begin
if not(f[1] in ['-','=',' ']) then
f0.add(f)
else
begin
if f[1]='-' then inc(j);
if j>2 then break;
end;
end;

if pos('会计科目: 0002',f)>0 then b:=true;//要注意':'与'0002'中间的空格数目
end;
f0.savetofile('temp.txt');
f.free;
f0.free;
end;

看看中不中
 
to :苦虫,谢谢您!!!
真是苦了您这条虫了!!!!!!
运行通过,但读到文本'temp.txt'中的内容为空.
 
to joann:
高人,真拿你没办法 [^]
到这儿来取源码 http://kcsoft.51.net/download/source.zip

还有问题给我来信china_kuchong@163.com
 
后退
顶部