Delphi如何達到C#的Split功能? |
答題得分者是:pcboy
|
7-11
一般會員 ![]() ![]() 發表:53 回覆:33 積分:16 註冊:2005-12-05 發送簡訊給我 |
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
小弟沒用 C#
下面程式碼看看是否合用 <textarea class="delphi" rows="10" cols="60" name="code"> function split(split_str : string ; line_str : string ) : TStrings ; //字串分割 分割用字元 , 原始字串, var posi : integer ; str : TStringList ; l_str : string ; begin str := TStringList.Create; posi := pos(split_str, line_str) ; while (posi > 0) do begin l_str := copy(line_str,1, posi-1) ; str.Add(l_str) ; line_str := copy (line_str , posi length(split_str), length(line_str) - posi-length(split_str)) ; posi := pos(split_str, line_str) ; end ; //while str.Add(line_str) ; Result := str ; end ; </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
或者用 Delimiter 和 DelimitedText 這裡有範例 http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=48648
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
HikaruGo
中階會員 ![]() ![]() ![]() 發表:22 回覆:69 積分:88 註冊:2007-12-09 發送簡訊給我 |
發現此Code超過5個引數會有BUG 如 1;2;3;4;5;6;7; ===================引 用 pcboy 文 章=================== 小弟沒用 C# 下面程式碼看看是否合用 <textarea class="delphi" rows="10" cols="60" name="code">function split(split_str : string ; line_str : string ) : TStrings ; //字串分割 分割用字元 , 原始字串, var posi : integer ; str : TStringList ; l_str : string ; begin str := TStringList.Create; posi := pos(split_str, line_str) ; while (posi > 0) do begin l_str := copy(line_str,1, posi-1) ; str.Add(l_str) ; line_str := copy (line_str , posi length(split_str), length(line_str) - posi-length(split_str)) ; posi := pos(split_str, line_str) ; end ; //while str.Add(line_str) ; Result := str ; end ; </textarea> |
dennis_wu
一般會員 ![]() ![]() 發表:6 回覆:2 積分:1 註冊:2007-12-12 發送簡訊給我 |
回應 pcboy 大大
我在用時發現會截掉後面的字元(以','去split), 我稍微修改之後就可以, 但沒道理, 我覺得大大的code應該沒問題啊? 奇怪!!. [code delphi] function split(split_str : string ; line_str : string ) : TStrings ; //字串分割 分割用字元 , 原始字串, var posi : integer ; str : TStringList ; l_str : string ; begin str := TStringList.Create; posi := pos(split_str, line_str) ; while (posi > 0) do begin l_str := copy(line_str,1, posi-1) ; str.Add(l_str) ; //line_str := copy (line_str , posi length(split_str), length(line_str) - posi-length(split_str)) ; <----這會截掉 line_str 後面 length(split_str) 個字元 line_str := copy (line_str , posi length(split_str), length(line_str) - posi) ; posi := pos(split_str, line_str) ; end ; //while str.Add(line_str) ; Result := str ; end ; [/code] ===================引 用 pcboy 文 章=================== 小弟沒用 C# 下面程式碼看看是否合用 [code delphi] function split(split_str : string ; line_str : string ) : TStrings ; //字串分割 分割用字元 , 原始字串, var posi : integer ; str : TStringList ; l_str : string ; begin str := TStringList.Create; posi := pos(split_str, line_str) ; while (posi > 0) do begin ???? l_str := copy(line_str,1, posi-1) ; ???? str.Add(l_str) ; ???? line_str := copy (line_str , posi length(split_str), length(line_str) - posi-length(split_str)) ; ???? posi := pos(split_str, line_str) ; end ; //while str.Add(line_str) ; Result := str ; end ; [/code]
編輯記錄
dennis_wu 重新編輯於 2009-02-05 18:10:58, 註解 無‧
|
roviury
一般會員 ![]() ![]() 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
[code delphi] 最簡單是用strings的內建功能,不過只能用char分割 以下2個版本 看得懂那個就用那個(完全一樣功能) 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. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |