在DELPHI中有分割字符串的函数吗? |
尚未結案
|
bolidehi
一般會員 發表:11 回覆:11 積分:4 註冊:2004-03-10 發送簡訊給我 |
|
James
高階會員 發表:10 回覆:290 積分:220 註冊:2002-07-25 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
利用TStringList物件可以輕易做到,如下:
procedure TForm1.Button1Click(Sender: TObject); const s = '028|5412468|888|BOLIDEHI'; var ss:TStringList; begin ss:=TStringList.Create; try ss.Delimiter:='|'; //設定分隔的字元 ss.DelimitedText:=s; Memo1.Lines.Assign(ss); finally ss.Free; end; end;不過會有個bug,就是當s為'028|54 12468|888|BOLIDEHI'時,原本的"54 12468"會被拆成兩個 |
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
bolidehi 您好 : 您是要問 Regular Expressions 還是類似 C 的 strtok 功能?? 免錢的請參考 :http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41594 [只是 API ,沒有包成 Class] 另外一個包裝精美,功能強大,但要 $$ 的請參考 [包成 Class] :
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41602 如果是要類似 strtok 的功能 ..
陳寬達先生的 "Delphi 深度歷險"一書有他的自製函式庫... 在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45270 中我偷用了
GetToken (XShadow.pas) .. 您可以參考看看 .. ----
我只會兩件事,這也不會,那也不會 眼見不一定為真
----
|
bolidehi
一般會員 發表:11 回覆:11 積分:4 註冊:2004-03-10 發送簡訊給我 |
|
qjzh
一般會員 發表:0 回覆:1 積分:0 註冊:2003-07-29 發送簡訊給我 |
用ExtractStrings函数,无论你有多少个'|'都能以它来分割
procedure TForm1.Button1Click(Sender: TObject);
var
strs:tstringlist;
i:integer;
begin
strs:=tstringlist.create;
ExtractStrings(['|'],[],'1|abcde|fgggg',strs);
for i:=0 to strs.Count -1 do
ShowMessage(strs.Strings[i]);
strs.free;
end;
|
peipei36
一般會員 發表:8 回覆:51 積分:16 註冊:2002-03-13 發送簡訊給我 |
extractstrings()感覺也蠻有彈性的
但若切割字串含有空字串似乎沒支援..要另處理
感覺一般用途 自己寫一個比較方便..
但若考慮字串內含#13#10
可能程式要多作處理 先轉換成其他代碼..
function mySplit(cSrcStr,cDelimiter:string):TStrings; begin result:=TStringList.Create; result.Text:=StringReplace(cSrcStr,cDelimiter,#13#10,[rfReplaceAll]); end; |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
看看 這是不是你要的
Function GetCutbStr(Str:String ; Xs,Xe:Word):String; //求字串截取後新字串 //Str:舊字串 //Xs:截取舊字串起始位置 //Xe:截取舊字串長度 var S:String; begin Result:=Str; if (Length(Str)=0) or ((Xe Xs-1)>Length(Str)) then Exit; if (Xs<1) then Exit; S:=''; if Xs>1 then S:=Copy(Str,1,Xs-1); S:=S Copy(Str,Xs Xe,Length(Str)-(Xs Xe-1)); Result:=S; //DEMO: GetCutbStr('0123456789',3,5):='01789'; //CvStr:=GetCutbStr(CvStr,Pos('F=' Query3fav_itm.Text,CvStr),Length('F=' Query3fav_itm.Text) 1); end; |
thatiswhyyougo2004
一般會員 發表:2 回覆:1 積分:0 註冊:2004-05-24 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
我也來湊個熱鬧吧...
procedure SplitStr(AStr:string; Separator:TSysCharSet; var Strings:TStrings); var a,b:integer; begin a:=1; Strings.Clear; AStr:=AStr '_'; for b:=1 to Length(AStr) do if (AStr[b] in Separator) or (b=Length(AStr)) then begin if b-a>1 then Strings.Add(Copy(AStr,a,b-a)); a:=b 1; end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |