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

【請問midstr和copy的差別】

答題得分者是:pceyes
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-16 14:44:52 IP:60.250.xxx.xxx 訂閱
(所在單元:StrUtils)
功能說明:返回指定範圍內的字串。該函數有三個參數。第一個參數為源字串,第二個參數為起點,第三個參數為結束點。通過第二、第三個參數則可指定要複製字串的範圍。
參考實例:
S: String;
begin
H := MidStr(''電腦報'', 1, 1); // H變數為“電”。如果使用Copy函數,則應是H := Copy(''電腦報, 1, 2),否則返回的將不是“電”字。因此在使用操作含有中文的字串時,最好使用MidStr。
end;

以上是網路上看的
不過試驗的結果
copy和midstr結果相同
並沒有和上述所說的
用midstr抓中文字會比較好用
麻煩先進指導一下
謝謝
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-17 06:44:50 IP:220.141.xxx.xxx 訂閱
我用D7試的結果和你不一樣,之前的Po文是對的,如果要達到MidStr的效果,Copy的字串要改為WideString,才能達到字元和文字視為一個字的效果。(d2009暫時未試,UnicodeString應該就不用管這些了)
[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text := MidStr('China', 1, 3); // Chi
Edit2.text := MidStr('1電2腦報', 1, 3); // 1電2
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ws:Widestring;
begin
Edit3.text := Copy('China', 1, 3); // Chi
ws := '1電2腦報'; // 這裏我作弊
// 改為WideString 1和電字都視為一個字
Edit4.text := Copy(ws, 1, 3); // 1電2
end;

[/code]
------
努力會更接近成功
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-17 10:39:18 IP:122.116.xxx.xxx 訂閱

===================引 用 pceyes 文 章===================
我用D7試的結果和你不一樣,之前的Po文是對的,如果要達到MidStr的效果,Copy的字串要改為WideString,才能達到字元和文字視為一個字的效果。(d2009暫時未試,UnicodeString應該就不用管這些了)
[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text := MidStr('China', 1, 3); // Chi
Edit2.text := MidStr('1電2腦報', 1, 3); // 1電2
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ws:Widestring;
begin
Edit3.text := Copy('China', 1, 3); // Chi
ws := '1電2腦報'; // 這裏我作弊
// 改為WideString 1和電字都視為一個字
Edit4.text := Copy(ws, 1, 3); // 1電2
end;

[/code]

奇怪
我用的是D5
怎麼和你的不一樣呢
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-17 12:12:11 IP:122.116.xxx.xxx 未訂閱
我去找 strutils.pas (D6) 

function MidStr(const AText: string; const AStart, ACount: Integer): string;
begin
Result := Copy(AText, AStart, ACount);
end;
看起來和 COPY 一樣, 可能只是為了用語較 COMPATIBLE 吧


===================引 用 andyto202 文 章===================
(所在單元:StrUtils)
功能說明:返回指定範圍內的字串。該函數有三個參數。第一個參數為源字串,第二個參數為起點,第三個參數為結束點。通過第二、第三個參數則可指定要複製字串的範圍。
參考實例:
S: String;
begin
H := MidStr(''電腦報'', 1, 1); // H變數為“電”。如果使用Copy函數,則應是H := Copy(''電腦報, 1, 2),否則返回的將不是“電”字。因此在使用操作含有中文的字串時,最好使用MidStr。
end;

以上是網路上看的
不過試驗的結果
copy和midstr結果相同
並沒有和上述所說的
用midstr抓中文字會比較好用
麻煩先進指導一下
謝謝
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-17 13:39:15 IP:122.118.xxx.xxx 訂閱
我去找 strutils.pas (D7)對字串的處理不同了。

function MidStr(const AText: AnsiString; const AStart, ACount: Integer): WideString(AText), AStart, ACount);
end;

function MidStr(const AText: WideString; overload;
begin
Result := Copy(AText, AStart, ACount);
end;


===================引 用 st33chen 文 章===================
我去找 strutils.pas (D6)

function MidStr(const AText: string; const AStart, ACount: Integer): string;
begin
Result := Copy(AText, AStart, ACount);
end;
看起來和 COPY 一樣, 可能只是為了用語較 COMPATIBLE 吧


===================引 用 andyto202 文 章===================
(所在單元:StrUtils)
功能說明:返回指定範圍內的字串。該函數有三個參數。第一個參數為源字串,第二個參數為起點,第三個參數為結束點。通過第二、第三個參數則可指定要複製字串的範圍。
參考實例:
S: String;
begin
H := MidStr(''電腦報'', 1, 1); // H變數為“電”。如果使用Copy函數,則應是H := Copy(''電腦報, 1, 2),否則返回的將不是“電”字。因此在使用操作含有中文的字串時,最好使用MidStr。
end;

以上是網路上看的
不過試驗的結果
copy和midstr結果相同
並沒有和上述所說的
用midstr抓中文字會比較好用
麻煩先進指導一下
謝謝
------
努力會更接近成功
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-17 14:12:44 IP:122.116.xxx.xxx 未訂閱
我再找了一下 D6 的 STRUTILS.PAS, 確實只有一種定義
看來 D7 用多型來定義不同型的 MIDSTR 以適用不同的需要
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-17 18:43:46 IP:122.116.xxx.xxx 訂閱
請問把d7的striutils.pas拿到d5來用可以嗎??

===================引 用 pceyes 文 章===================
我去找 strutils.pas (D7)對字串的處理不同了。

function MidStr(const AText: AnsiString; const AStart, ACount: Integer): WideString(AText), AStart, ACount);
end;

function MidStr(const AText: WideString; overload;
begin
Result := Copy(AText, AStart, ACount);
end;


===================引 用 st33chen 文 章===================
我去找 strutils.pas (D6)

function MidStr(const AText: string; const AStart, ACount: Integer): string;
begin
Result := Copy(AText, AStart, ACount);
end;
看起來和 COPY 一樣, 可能只是為了用語較 COMPATIBLE 吧


===================引 用 andyto202 文 章===================
(所在單元:StrUtils)
功能說明:返回指定範圍內的字串。該函數有三個參數。第一個參數為源字串,第二個參數為起點,第三個參數為結束點。通過第二、第三個參數則可指定要複製字串的範圍。
參考實例:
S: String;
begin
H := MidStr(''電腦報'', 1, 1); // H變數為“電”。如果使用Copy函數,則應是H := Copy(''電腦報, 1, 2),否則返回的將不是“電”字。因此在使用操作含有中文的字串時,最好使用MidStr。
end;

以上是網路上看的
不過試驗的結果
copy和midstr結果相同
並沒有和上述所說的
用midstr抓中文字會比較好用
麻煩先進指導一下
謝謝
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-18 11:34:44 IP:122.118.xxx.xxx 訂閱
反對你這樣做,因為D2009已沒有MidStr的函數了,直接用Copy了,如果想要誏計算字數為1字元,就用我之前的方法,先轉成WideString再進行copy即可了。
------
努力會更接近成功
系統時間:2024-04-27 9:04:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!