多字元的字串分割函式MultiSpilt |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
處理Delimeters 不一定是一個字元的狀況
且處理最後一個也是Delimeters 的情形 use StrUtils;
function MultiSplit(const Str, Delimiters: string): TStrings; var ss: WideString; St1, St2: integer; begin Result := TStringList.Create; St1:=1; St2:=PosEx(Delimiters, Str, St1); While (St2>0) do begin if (St2>St1) and (St2 |
yaoyao01tw
一般會員 發表:28 回覆:17 積分:9 註冊:2003-01-28 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
分高效低效2種,實際使用差別不大,但第2種較直觀
[code delphi] function MultiSpilt(str,substr:string):tstrings; var i,sl,k,ssl:integer; begin result:=tstringlist.create; i:=0; sl:=length(str)-1; k:=0; ssl:=length(substr); while i result.add(copy(str,1,i-k)); delete(str,1,i-k ssl); dec(sl,i-k ssl); i:=0; k:=0; end; if str[i 1]=substr[1 k] then inc(k) else if k>0 then k:=0; inc(i); end; result.add(str); end; function MultiSpiltB(str,substr:string):tstrings; // MultiSpiltB(' A%B,C{}AX','{}') A%B,C{}AX=A_%B,C{}AX=A_%B:%C{}AX=A_%B:%C,AX var i:integer; begin result:=tstringlist.create; result.CommaText:= StringReplace( StringReplace( StringReplace(str,'%','_%',[rfReplaceAll]) ,',',':%',[rfReplaceAll] ) ,substr,',',[rfReplaceAll] ); for i := 0 to result.Count-1 do begin result[i]:=StringReplace( StringReplace(result[i],':%',',',[rfReplaceAll]) ,'_%','%',[rfReplaceAll] ); end; end; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |