線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1508
推到 Plurk!
推到 Facebook!

string 格式提取問題

尚未結案
KFC123_60201
一般會員


發表:58
回覆:18
積分:15
註冊:2006-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-10 15:28:41 IP:139.78.xxx.xxx 訂閱
我有大量的字串格式如下: 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-10 17:15:39 IP:120.107.xxx.xxx 訂閱
[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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-10 17:23:53 IP:59.125.xxx.xxx 未訂閱
 我的是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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-03-11 09:13:23 IP:59.125.xxx.xxx 訂閱
使用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-03-11 09:17:12 IP:211.75.xxx.xxx 未訂閱
怎不用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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-03-25 12:30:35 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-16 18:45:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!