string 格式提取問題 |
尚未結案
|
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
我有大量的字串格式如下: yyyy {xxxx}
其中, yyyy 是英文,xxxx 是中文。我要提取其中 {}中的部分,即 xxxx。我的代碼如下 [code delphi] var parB, parE, idx :Integer; str :string; begin // str 是原字串 parB := -1; parE := -1; if (str<>'') then begin for idx:=0 to Length(str) do begin if ((parB=-1) and (str[idx]='{')) then parB := idx; if ((parE=-1) and (str[idx]='}')) then parE := idx; end; end; if ((parB>=0) and (parE>=0) and (parE>parB)) then Result := AnsiMidStr(str, parB, parE-parB 1) else Result := ''; end; [/code] 這段代碼衹對部分情況適用,對某些情況如 hello {糖} 這樣的例子,由於"糖"的ASCII碼中含有 '}' ,所以會出現解釋錯誤,有甚麼方式處理呢?謝謝 |
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
[code delphi]
procedure TForm1.Button1Click(Sender: TObject); var parB,parE,idx:Integer; str,shs:string; begin if edit1.Text<>'' then str:=edit1.Text; parB:=-1; parE:=-1; if (str<>'') then for idx:=0 to Length(str) do begin if str[idx]='{' then parB:=idx 1; if str[idx]='}' then parE:=idx; end; shs:=copy(str,parB,parE-parB); showmessage(shs); end;[/code] 我是這樣用的...測的時候是可以的。 前題是資料是長這樣→ YYYY {XXXX} Y為英文,X為中文。 新手試著寫的,有問題還請多多包含及教導。
編輯記錄
tokiama 重新編輯於 2010-03-10 19:14:38, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
我的是Delphi2009, String可以處理unicode.
簡單測試如下, Edit2.Text可以正常顯示"糖糖糖". var sTemp: String; I, iPos1, iPos2: Integer; begin sTemp := Edit1.Text; //hello {糖糖糖} for I := 0 to Length(sTemp) do begin if sTemp[I] = '{' then iPos1 := I; if sTemp[I] = '}' then iPos2 := I; end; Edit2.Text := Copy(sTemp, iPos1 1, iPos2-iPos1-1); end;
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
使用 Pos()或 AnsiPos () 直接找出 "{" 與 "}" 的位置
然後直接 Copy (xxx, start , end) 有多組,就加迴圈 ===================引 用 KFC123_60201 文 章=================== 我有大量的字串格式如下: yyyy {xxxx} 其中, yyyy 是英文,xxxx 是中文。我要提取其中 {}中的部分,即 xxxx。我的代碼如下 [code delphi] var parB, parE, idx :Integer; str :string; begin // str 是原字串 parB := -1; parE := -1; if (str<>'') then begin for idx:=0 to Length(str) do begin if ((parB=-1) and (str[idx]='{')) then parB := idx; if ((parE=-1) and (str[idx]='}')) then parE := idx; end; end; if ((parB>=0) and (parE>=0) and (parE>parB)) then Result := AnsiMidStr(str, parB, parE-parB 1) else Result := ''; end; [/code] 這段代碼衹對部分情況適用,對某些情況如 hello {糖} 這樣的例子,由於"糖"的ASCII碼中含有 '}' ,所以會出現解釋錯誤,有甚麼方式處理呢?謝謝 |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
怎不用AnsiPos呢?
以下適用Delphi 6 hello {糖} 可正確取得 糖 [code delphi] var parB, parE :Integer; begin parB := -1; parE := -1; if (str<>'') then begin parB := AnsiPos('{',str); parE := AnsiPos('}',str); end; if ((parB>=0) and (parE>=0) and (parE>parB)) then begin Result:= MidStr(str, parB 1 , parE-parB -1); end else Result := ''; end; [/code] ===================引 用 KFC123_60201 文 章=================== 我有大量的字串格式如下: yyyy {xxxx} 其中, yyyy 是英文,xxxx 是中文。我要提取其中 {}中的部分,即 xxxx。我的代碼如下 [code delphi] var parB, parE, idx :Integer; str :string; begin // str 是原字串 parB := -1; parE := -1; if (str<>'') then begin for idx:=0 to Length(str) do begin if ((parB=-1) and (str[idx]='{')) then parB := idx; if ((parE=-1) and (str[idx]='}')) then parE := idx; end; end; if ((parB>=0) and (parE>=0) and (parE>parB)) then Result := AnsiMidStr(str, parB, parE-parB 1) else Result := ''; end; [/code] 這段代碼衹對部分情況適用,對某些情況如 hello {糖} 這樣的例子,由於"糖"的ASCII碼中含有 '}' ,所以會出現解釋錯誤,有甚麼方式處理呢?謝謝
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |