procedure TForm1.Button10Click(Sender: TObject);
var  l_Flag : Boolean;   i :integer;
begin
  l_Flag := true;
  memo2.Lines.Clear;
  ProgressBar1.Max := Length(Memo1.Text);
  for i := 1 to Length(Memo1.Text) do
  begin
    Application.ProcessMessages;
    ProgressBar1.Position := i;
    if (Memo1.Text[i] = #32) or (Memo1.Text[i] = #9) then
    begin
      if l_Flag then
      begin
        memo2.text := (memo2.text + #9); 
        l_Flag := False;
      end;
    end
    else
    begin
      memo2.text := memo2.text + Memo1.Text[i];
      l_Flag := True;
    end;
  end;
    showmessage('over');
    {保存打开的市场价格文件}
    if OpenDialog1.FileName <> '' then
    memo2.Lines.SaveToFile(OpenDialog1.FileName);

解决方案 »

  1.   

    如果要看到实时的结果,处理过程没有可优化的办法.
    但,如果Memo2不是需要实时看到结果,可放入内存,处理后再显示:procedure TForm1.Button10Click(Sender: TObject); 
    var
      l_Flag : Boolean;
      i :integer; 
      ls: TStrings;
    begin 
      l_Flag := true; 
      ls:= TStringList.Create;
      //memo2.Lines.Clear; 
      ProgressBar1.Max := Length(Memo1.Text); 
      for i := 1 to Length(Memo1.Text) do 
      begin 
        Application.ProcessMessages; 
        ProgressBar1.Position := i; 
        if (Memo1.Text[i] = #32) or (Memo1.Text[i] = #9) then 
        begin 
          if l_Flag then 
          begin 
            //memo2.text := (memo2.text + #9);  
            ls.text:= ls.text + #9;  
            l_Flag := False; 
          end; 
        end 
        else 
        begin 
          //memo2.text := memo2.text + Memo1.Text[i]; 
          ls.text := ls.text + Memo1.Text[i]; 
          l_Flag := True; 
        end; 
      end; 
      Memo2.Lines.Clear; 
      Memo2.Text:= ls.Text;//将处理结果送Memo2显示
      showmessage('over'); 
      {保存打开的市场价格文件} 
      if OpenDialog1.FileName  <> '' then 
        ls.SaveToFile(OpenDialog1.FileName);//将处理结果落地保存
      ls.Free;
      

  2.   

    1MB还大么?本人处理的数据一次性读入内存有200MB.
      

  3.   

    一次性读取到内存,然后替换,最后显示,肯定比用memo快
      

  4.   

    一次读入内存, 处理完毕后, 直接赋值给memo, 就会很快了.
      

  5.   

    明白了你的意图:将Memo1中的#32替换成#9
    试试这个:
    procedure TForm1.Button10Click(Sender: TObject); 
    var
      s: string;
      ls: TStrings;
    begin 
      ls:= TStringList.Create;
      ProgressBar1.Max := Memo1.Lines.Count;
      for i := 0 to Memo1.Lines.Count-1 do 
      begin 
        Application.ProcessMessages; 
        ProgressBar1.Position := i; 
        s:= Memo1.Lines[i];
        StringReplace(s,#32,#9,[rfReplaceAll, rfIgnoreCase]);
        ls.Add(s);
      end; 
      Memo2.Lines.Clear; 
      Memo2.Text:= ls.Text;//将处理结果送Memo2显示
      showmessage('over'); 
      {保存打开的市场价格文件} 
      if OpenDialog1.FileName  <> '' then 
        ls.SaveToFile(OpenDialog1.FileName);//将处理结果落地保存
      ls.Free;
      

  6.   

    我是要将Memo1中的#32替换成#9 可是呢,直接用StringReplace替换是可以,但是不能提高工作效率,要想把文件拆成多个文件同时处理,就像下载软件一下处理,是不是可以可以执行呢。
      

  7.   

    同志感谢啊,成功了,那个取值时只要设置成TStringList的类型就可以了