Archive for十月 31, 2008

lazarus/delphi的字符分割函数

很奇怪为什么Pascal里没有类似split的函数,当年看了半天手册找到一个变态的方法:

li := TStringList.Create;
li.Delimiter:=';'
li.DelimitedText:=Str;

今天发现这个方法也有问题,类似 '1111;2222; 3333 333;'的字符串会分割错,空格也被当成分割符。
实在没办法,按照C语言的方式写了个Split,如果谁知道Pascal里有原生态的字符分割函数,麻烦请告诉我

procedure Split(Str : String; li : TStrings);
var  
    PStr, LastP,P: PChar;
begin  
     PStr := PChar(Str);   
     LastP := PStr;   
     P     := PStr;
     while P^ <> chr(0) do
     begin
        if P^=';' then
        begin
           P^:=chr(0);
           if LastP <> P then
              li.Add(LastP);
           LastP:=P+1;
           P^:=';';
        end;
        Inc(P);
     end;
     if LastP <> p then
        li.Add(LastP);
end;           

Comments (2)