我有一个文本文件a61501.txt,格式如下:
科目号 科目名称 期初余额(借) 期初余额(贷) 本期发生额(借) 本期发生额(贷) 期末余额(借) 期末余额(贷)科目号 币种
121001 短期普通贷款 1,402,814,000.00 927,080,000.00 932,400,000.00 1,397,494,000.00 121001 001
201099 单位活期存款其他 578,815,963.05 47,881,388,770.83 47,892,793,018.35 590,220,210.57201099 001注意:1,每一行长度相等,共196个字符,每一项目位置靠右固定,如本期发生额(贷)最后一个字符在140,期末余额(借)最后一个字符在163。
2,期末余额(贷)和科目号中间无空格。
3,如果某一项无数,就以空格表示
4,该文件大概有7000多行。
5,可再http://hason18.go.nease.net/a61501.txt上下载该文件的格式。
我的目的:
我要从该文件中找出币种为001中的大概30个科目的期末余额,余额可能在借方,也可能在贷方。再进行加减等操作。
例如1210,1410,1440,1445等开头的科目号。我应该怎么做?还有一个问题,这种代有分节符的字符串怎么转换成数字进行加减。
科目号 科目名称 期初余额(借) 期初余额(贷) 本期发生额(借) 本期发生额(贷) 期末余额(借) 期末余额(贷)科目号 币种
121001 短期普通贷款 1,402,814,000.00 927,080,000.00 932,400,000.00 1,397,494,000.00 121001 001
201099 单位活期存款其他 578,815,963.05 47,881,388,770.83 47,892,793,018.35 590,220,210.57201099 001注意:1,每一行长度相等,共196个字符,每一项目位置靠右固定,如本期发生额(贷)最后一个字符在140,期末余额(借)最后一个字符在163。
2,期末余额(贷)和科目号中间无空格。
3,如果某一项无数,就以空格表示
4,该文件大概有7000多行。
5,可再http://hason18.go.nease.net/a61501.txt上下载该文件的格式。
我的目的:
我要从该文件中找出币种为001中的大概30个科目的期末余额,余额可能在借方,也可能在贷方。再进行加减等操作。
例如1210,1410,1440,1445等开头的科目号。我应该怎么做?还有一个问题,这种代有分节符的字符串怎么转换成数字进行加减。
2、关于分节符:
procedure TForm1.Button3Click(Sender: TObject);
var
a:string;
b:TStringList;
i:integer;
str:String;
begin
a:='192,235,828.00';
b:=TStringList.Create;
ExtractStrings([','],[],Pchar(a),b);
for i:=0 to b.Count-1 do
begin
str:=Str+b[i];
end;
showMessage(Str);end;已调试!
你用TSTRINGLIST.LOADFROMFILE("...")来处理速度肯定会块很多的。
procedure TForm1.Button2Click(Sender: TObject);
var
kemu:String;
i:integer;
temp :TStringList;
filename,yue: String;
ii,j:Integer;
OutputFile:textfile;
begin
temp:=TstringList.Create;
try
Temp.LoadFromFile('a61501.txt');
AssignFile(OutputFile,'yue.txt');
rewrite(OutputFile);
for i:=0 to ListBox1.Count-1 do
begin
kemu:= ListBox1.Items[i];
for ii:=0 to temp.Count-1 do
begin
j:=Pos(kemu,pchar(temp.Strings[ii]));
//MessageBox(handle,,pchar(caption),mb_IconInformation+mb_ok);
if j>0 then
begin
yue:= copy(pchar(temp.Strings[ii]),140,23);
if trim(yue)='' then
begin
yue:= copy(pchar(temp.Strings[ii]),163,23);
end;
writeln(OutputFile,kemu+' '+yue);
//showmessage(trim(yue));
end;//if
end;//for
end;//for
finally
temp.Free;
CloseFile(OutputFile);
ShowMessage('余额生成成功!');
end;end;我觉得还有一个问题,如果金额太大了,比如123,456,789,000.12,转换成数值可能要出错吧,改怎么转换?