Q&A

  • 속도 올리기
님들 도와 주세여.....속도같은 고 단위는...흐흑~제겐 너무 벅차네여..ㅠㅠ

제가 하고 싶은 건 text파일을 불러와서 그 파일내의 2칸 이상의 빈칸을 찾아내서 지우는 겁니다.
어렵게 어렵게 방법을 찾아내긴 했는데..(초보는 너무 힘듭니다..ㅜㅡ) 이게 text의 용량이 몇 백KB(MB..아닙니다..)가 넘으니..속도가 너무 느려집니다.
10분 이상씩 조용~하구여..
님들...도와 주세여...어떻해야 속도를 올릴 수 있죠?ㅡㅜ
아래는 제가 짠 2칸 이상의 빈칸을 찾아내서 지우는 소스 입니다.
보시고 도와주세요~!!!

procedure TMainForm.noemptyClick(Sender: TObject);
var
    S, temp: string;
    P : Integer;
begin
    S := Memo.Text;
    temp := '';
    p := Pos('  ', S);  //빈칸 위치 찾기
    while p <> 0 do  //빈칸이 있는 동안 계속 찾기
    begin
        temp := temp + Copy(S, 1, p -1) ;
        Delete(S, 1, p);
        p := Pos('  ', S);
    end;

    Memo.Clear;
    Memo.Text := temp + ' ';

end;
4  COMMENTS
  • Profile
    프리맨 2003.03.28 23:42
    이렇게 되겠네요...^^

    procedure TMainForm.noemptyClick(Sender: TObject);
    var
      s1,s2:string;
      p1,p2:PChar;
      len:integer;
    begin
      s1:=Memo.Text;
      len:=length(s1);
      p1:=PChar(s1);          
      Setlength(s2,len);  // 미리 길이를 정해주면 재할당하지 않으므로 빠릅니다.
      p2:=Pointer(s2);

      while p1^<>#0 do // p1은 PChar로 타입캐스트 했으므로 이것이 가능!
      begin
        if (p1^<>' ') or ((p1+1)^<>' ') then
        begin
          p2^:=p1^;
          inc(p2);
        end;
        inc(p1);
      end;

      SetLength(s2,p2-Pointer(s2)); // p2는 Pointer 로 타입캐스트 했으므로..
      Memo.Text :=s2;
    end;


  • Profile
    정수지 2003.03.28 23:49
  • Profile
    사오정 2003.03.28 23:16
    참고 하세요~

    http://www.delphi.co.kr/zboard/view.php?id=qanda&page=1&sn1=&divpage=5&sn=off&ss=on&sc=on&keyword=SearchAndReplace&select_arrange=headnum&desc=asc&no=21796


  • Profile
    강정구 2003.03.28 22:53
    님 소스를 4M 파일로 테스트 했는데 별로 느리지 않던데요