全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5876
推到 Plurk!
推到 Facebook!

Delphi如何達到C#的Split功能?

答題得分者是:pcboy
7-11
一般會員


發表:53
回覆:33
積分:16
註冊:2005-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-15 17:40:57 IP:220.142.xxx.xxx 訂閱
請問各位大大Delphi如何達到Visual C# (.NET 2.0)中Split的功能?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-15 19:46:02 IP:203.204.xxx.xxx 訂閱
小弟沒用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-15 19:54:36 IP:203.204.xxx.xxx 訂閱
或者用  Delimiter 和 DelimitedText
這裡有範例
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=48648 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-06 13:28:03 IP:61.62.xxx.xxx 訂閱

發現此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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-05 18:06:43 IP:219.87.xxx.xxx 訂閱
回應 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-19 13:21:44 IP:203.186.xxx.xxx 訂閱

[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 if k=ssl then begin
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]
編輯記錄
roviury 重新編輯於 2009-05-19 13:22:18, 註解 無‧
roviury 重新編輯於 2009-05-19 13:22:40, 註解 無‧
roviury 重新編輯於 2009-05-19 13:23:11, 註解 無‧
系統時間:2017-10-17 22:49:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!