有一string,如下所示,现要把他们解悉出来放到一个strings中去。因为要解悉几万条这样的记录,所以,算法可能要精简一下。
 '苏D0015挂   大型汽车    2004-04-01 09:41:06   武青路      闯红灯'
  ....
中间空格的字符数可能不等。
函数格式如下:
procedure GetArray(str:string;var retstrs:TStrings);
//把str字符串解悉出来放至retstrs字符串组中去
begin
....
end;

解决方案 »

  1.   

    要解悉成
    retstrs[0]='苏D0015挂'
    retstrs[1]='大型汽车'
    retstrs[2]='2004-04-01 09:41:06'
    retstrs[3]='武青路'
    retstrs[4]='闯红灯'
      

  2.   

    可以用pos,copy来做。不过要保证'武青路','闯红灯'中没有空隔,var
      i : integer;
      n : integer;
      s_str,source_str : string;
      Dest_Str : Tstrings;
    begin
      Dest_Str := Tstrings.Create;
      Dest_Str.Clear;
      n := 0;  while i <> 0 do
      begin
        i := pos(' ',source_str);
        if i > 1 then                           //得到空格前的字符
        begin
          Dest_Str.Strings[n] := Copy(source_str,1,i-1);
          n := n + 1;
        end else
         source_str := Copy(source_str,2,Length(source_str)); //删除第一个空格
      end;
      

  3.   

    JEDI的算法,应该算是不错的了。
    procedure StrToStrings(S: AnsiString; Sep: AnsiString; const List: TStrings);
    var
      I, L: Integer;
      Left: AnsiString;
    begin
      Assert(List <> nil);
      List.Clear;
      L := Length(Sep);
      I := Pos(Sep, S);
      while (I > 0) do
      begin
        Left := StrLeft(S, I - 1);
        List.Add(Left);
        Delete(S, 1, I + L - 1);
        I := Pos(Sep, S);
      end;
      if S <> '' then
        List.Add(S);
    end;
      

  4.   

    至于retstrs[2]='2004-04-01 09:41:06',如果内容固定,你将Dest_Str.Strings[2]和Dest_Str.Strings[3]中间
    加个空格,然后加起来就行了。
      

  5.   

    应该可以满足你的要求,随便几个空隔都可以:)
    procedure GetArray(str: string; retstrs: TStrings);
    var
      Des: String;
      i: integer;
    begin
      Des := '';
      for i:=1 to length(Str) do
      begin
        if Str[i] <> ' ' then Des := Des + Str[i]
        else
        begin
          if Des <> '' then
            retstrs.Add(Des);
          Des := '';
          Continue;
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      S: String;
      St: TStringList;
      i: integer;
    begin
      st := TStringList.Create;
      S := '苏D0015挂   大型汽车    2004-04-01 09:41:06   武青路      闯红灯';
      GetArray(S, st);
      for i:=0 to st.Count -1 do
        ShowMessage(st.Strings[i]);
    end;