我有一个文本文件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等开头的科目号。我应该怎么做?还有一个问题,这种代有分节符的字符串怎么转换成数字进行加减。

解决方案 »

  1.   

    1、你可以这样先取贷方金额,如果为空,再取借方!
    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;已调试!
      

  2.   

    dyxfkj(我爱我老婆),很感谢!现在主要困扰我的是怎么从这个文件中取出来,我觉得这个是最大的问题。
      

  3.   

    我用readln将文件引入MEMO中,结果7000多行用了我半分钟多,而且CPU占用率高达98%,这个方法肯定不可行。
      

  4.   

    你为什么要引入MEMO呢,这是UI控件,处理速度肯定很慢的,
    你用TSTRINGLIST.LOADFROMFILE("...")来处理速度肯定会块很多的。
      

  5.   

    我自己写了一个测试用的,只实现了把需要的余额已字符串的形式取出来,然后写入文本文件中。觉得不够精简,看起挺晕的,哪个高手把帮我改改。
    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,转换成数值可能要出错吧,改怎么转换?