2008年7月12日 星期六

Script-Tip010字串的操作

*連接字串:您可以利用 .. 這個運算子來連結二個字串,或者連結字串和數字,數字會轉為

字串。


code:--------------------------------------------------------------------------------
Fullname = "Coffee".." worm";
--這時Fullname的值為"Coffee worm"
d = 365;
text = "一年有"..d.."天";
--這時text的值為"一年有365天"
--------------------------------------------------------------------------------

※為了程式閱讀方便,.. 並不一定要緊靠著字串或變數
foo = "test"..var;
寫成
foo = "test" .. var;也可以

*字串的比較
在寫程式的時候,經常會需要比對二個字串是否一樣,AMS內定使用 == 這個符號作為比對

符號,中文的話沒什麼問題,比對英文時預設是大小寫視為不同的(二個英文字串必須大小寫

都一樣,字串才會相等),比對的結果為布林值。
範例:

code:--------------------------------------------------------------------------------
str_one = "CoffeeWorm";
str_two = "CoffeeWorm";
if str_one == str_two then
Dialog.Message("比對結果", "二個字串相同");
else
Dialog.Message("比對結果", "二個字串不同");
end
--------------------------------------------------------------------------------

上例會顯示二個字串相同

※如果您希望比對時不要管字母大小寫,您可以將欲比對的字串先套用內建涵數Strng.Upper(

轉為大寫)或String.Lower(轉為小寫)再進行比對。
範例:

code:--------------------------------------------------------------------------------
str_one = "coffeeworm";
str_two = "CoffeeWorm";
if String.Lower(str_one) == String.Lower(str_two) then
Dialog.Message("比對結果", "二個字串相同");
else
Dialog.Message("比對結果", "二個字串不同");
end
--------------------------------------------------------------------------------

上例會顯示二個字串相同

*計算字串長度(含有多少個字元)
只要使用內建涵數String.Length就可以傳回字串的長度了

code:--------------------------------------------------------------------------------
str_text = "我是 Coffeeworm";
num_chars = String.Length(str_text);
Dialog.Message("字元數", num_chars.."個字");
--------------------------------------------------------------------------------

※特別注意,中文字是雙位元碼,所以一個中文字會被算二個字元,字串中的空白鍵也會照

算,所以這個例子會回應 「15個字」

*搜尋字串
有時候您會需要在一串長字串中搜尋一下是否含有指定的字串,這只要使用內建涵數

String.Find就行了

code:--------------------------------------------------------------------------------
str_source_text = "Isn't it a wonderful day outside?";
str_search = "wonder";
found_pos = String.Find(str_source_text , str_search);
--如果有找到,會傳回找到字串的最左邊字元的位置,若找不到會傳回nil
if found_pos ~= nil then
Dialog.Message("找到了", "在第"..found_pos.."個字");
else
Dialog.Message("找不到", "不包含這個字串");
end
--------------------------------------------------------------------------------

※中文字也是一樣可以找的,AMS是完全相容於雙位元碼的

*置換指定字串
想在長字串中將所有的某個字換掉可以使用內建涵數String.Replace

code:--------------------------------------------------------------------------------
str_target = "There can be only one. Only one is 合格的!";
str_search = "合";
str_place = "正";
str_new = String.Replace(str_target, str_search, str_place)
Dialog.Message("新字串", str_new);
--------------------------------------------------------------------------------

上例中,str_new便是得出的新字串,原字串中的「格」已被換成「正」了

*分解字串
有時候,我們想取得長字串的某些位置的字元,有三個內建的涵數可以用
String.Left 從字串的左側取得指定數目的字元
String.Right 從字串的右側取得指定數目的字元
String.Mid 指定從字串的第幾字元開始取,取幾個字元
範例:

code:--------------------------------------------------------------------------------
source_text = "It really is good to see you again.";
strleft = String.Left(source_text, 13);
strright = String.Right(source_text, 18);
strmid = String.Mid(source_text, 14, 4);
--------------------------------------------------------------------------------

上例中:
strleft 會是"It really is ",strright 會是" to see you again.",而strmid 會是"good"

*將字串型的數字轉成數字型
當您擁有一個字串型的數字時,您必須利用內建涵數String.ToNumber將它變成數字型態,然

後用於判斷式時才不會出錯。
例如:

code:--------------------------------------------------------------------------------
age = "18";
if age < 31 then
Dialog.Message("test", "比31歲小")
end
--------------------------------------------------------------------------------

上述的程式執行到if age < 31 then這一行時,就會出現錯誤了,因為程式引擎會認為字串和數

值是不能比大小的!
※在實務中,何時會有得到字串型數字的情形呢?譬如,您放了一個InputBox讓使用者輸入數

字,然後您去取得使用者輸入的數字,因InputBox預設取回的是「字串」,所以您便得到了一

個字串型數字。
要解決這個問題,如下:

code:--------------------------------------------------------------------------------
age = "18";
if String.ToNumber(age) < 31 then
Dialog.Message("test", "比31歲小")
end
--------------------------------------------------------------------------------


※還有一個方法:AMS內定,當字串型數字做運算時,就會自動轉換型別了,所以您可以讓

您所握有的字串進行一個數學運算

code:--------------------------------------------------------------------------------
age = "18";
age = age + 0
if age < 31 then
Dialog.Message("test", "比31歲小")
end

沒有留言: