求教处理这样的文本
1  2     3  4   5  6
中间空格不确定,处理后数据为
1,2,3,4,5,6
数据量大约为60万条记录,求高效率方法,用程序或者SQL处理都可这个问题的关键是如何将多个空格处理为1个空格

解决方案 »

  1.   


    function  SetText(s: string): string;
    var
      i: Integer;
    begin
      i := 1;
      Result := '';
      while i <= Length(s) do
      begin
        if s[i] <> ' ' then
          Result := Result + s[i]
        else
          begin
            Result := Result + ',';
            while s[i + 1] = ' ' do Inc(i);
          end;
          Inc(i);
      end;
    end;
      

  2.   

    function  SetText(s: string): string;
    var
      i: Integer;
    begin
      s:=StringReplace(s,' ','',[rfReplaceAll]);
      for i:=1 to Length(s) do
      begin
        if i=Length(s) then
          Result :=Result + s[i]
        else
          Result :=Result + s[i] + ',';
      end;
    end;
      

  3.   

    function Get(const AString: string): string;
    var
      L: Integer;
      P, R, Src: PChar;
    begin
      L := Length(AString);
      Result := StringOfChar(#0, L);
      P := PChar(AString);
      Src := P;
      R := PChar(Result);
      while P - Src > L do
      begin
        if P^ = #32 then
        begin
          while (P + 1)^ = #32 do Inc(P);
          if (P + 1)^ <> #0 then
            R^ := ',';
        end else
          R^ := P^; 
        Inc(P);
        Inc(R);
      end;
      SetLength(Result, R - PChar(Result));
    end;
      

  4.   

    while P - Src > L do
    >>改成
    while P - Src < L do没调试,自己试下。
      

  5.   

    //利用SQL写跟这个差不多,,
      

  6.   

    declare @t varchar(50)
    declare @i int
    declare @tt varchar(50)
    set @t='1  2    3  4  5  6 '
    set @i=1
    set @tt=''
    while @i<len( replace(rtrim(ltrim(@t)),' ',''))
     Begin
       set @tt=@tt+substring( replace(rtrim(ltrim(@t)),' ',''),@i,1)+','
       set @i=@i+1
     End
    select left(@tt,len(@tt)-1)/*
    1,2,3,4,5
    */
      

  7.   


    Create Function get_char(@t varchar(50))
    returns varchar(50)
    Begin  --declare @t varchar(50)
    declare @i int
    declare @tt varchar(50)
    --set @t='1  2    3  4  5  6 '
    set @i=1
    set @tt=''
    while @i<len( replace(rtrim(ltrim(@t)),' ',''))
     Begin
       set @tt=@tt+substring( replace(rtrim(ltrim(@t)),' ',''),@i,1)+','
       set @i=@i+1
     End
    return ( left(@tt,len(@tt)-1))Endselect dbo.get_char('1  2    3  4  5  6 ')
    /*
    1,2,3,4,5
    */
      

  8.   

    var
      str: string;
      strResult: string;
    begin
      strResult := '';
      str := Memo1.Lines.Text;
      str := TrimLeft(str);
      while Pos(#32,str)<>0 do begin
        strResult := strResult + Copy(str,1,Pos(#32,str)-1)+ ',';
        Delete(str,1,Pos(#32,str));
        str := TrimLeft(str);
      end;
      TrimRight(strResult);
      if strResult<>'' then strResult := strResult +str+ ',';
      Delete(strResult,Length(strResult),1);
      Memo2.Lines.Text := strResult;
    end;