字符“/”是轉義符,用于轉換一些特殊字符的含義。這些特殊字符有:
字符“ " ”用于標識字符串的開始和結尾。要使該字符在一個字符串中作為普通字符出現,則需要在它前面加一個字符“ / ”。例如要在一個字符串中包含以下內容:
"tom"是一個男孩的名字
則必須將該字符串描述為:
string:= "/"tom/"是一個男孩的名字"
如圖3-33所示。
圖3-33 顯示雙引號
如果需要【演示】窗口中顯示出字符“ / ”,也必須使用轉義符,例如要在字符串中包括一個合法的路徑:
c:/program files/macromedia/authorware 7
則必須將路徑字符串描述為:
"c://program files//macromedia//authorware 7"。
如果需要在字符串中包含回車符,可以向字符串中插入“/r”或系統變量return(兩者作用相同)。例如字符串變量
string:= "authorware 7"^return^"is"^"/r"^"coming"
嵌入文本對象之后的顯示結果如圖3-34所示。
圖3-34 在字符串中插入回車符
如果需要在字符串中包含制表符,可以向字符串中插入“/t”或系統變量tab。
字符“{}”可以在字符串中直接使用。但如果需要在文本對象輸入并顯示該字符,必須以“/{”方式輸入,否則authorware會認為包含在花括號之中的內容是一個表達式并對其進行計算。
通過使用行分隔符“/r”,在一個字符串變量中可以包含多行字符。但是在字符串變量作為文本對象顯示在【演示】窗口中時,情況會產生一些微妙的變化。
在文本對象中,由"/r"分隔的內容稱為段落(paragraph)。如果文本對象的寬度不足以將段落內容顯示在同一行(line)上,段落被自動分別多行顯示,此時字符串變量中的行與文本對象中的行就失去了對應關系。
例如在變量string中含有以下內容:
"authorware is the leading visual authoring tool for creating rich-media e-learning applications for delivery on corporate networks, cd/dvd, and the web./rdevelop accessible applications that comply with learning management system (lms) standards. "
將string嵌入到文本對象中之后,其顯示結果如圖3-35所示。原先僅僅2行的內容在文本對象中被劃分為2段共6行。單擊“web”這一單詞,然后在【變量】面板窗口中觀察系統變量lineclicked和paragraphclicked的值,可以發現authorware認為當前被單擊的行是第4行,被單擊的段落是第1段。但是無法通過函數getline(string, 4)得到任何內容,因為authorware認為變量string中僅僅包含2行內容。
圖3-35 【演示】窗口中的文本對象
理解這一點對于利用文本對象開展與用戶之間的交互過程是至關重要的。
在aws中,對行的處理方式非常靈活。通過定義新的行分隔符,可以將同一行中的字符劃分為邏輯上不同的行。例如變量string中包含了位于同一行中的兩句問候語:
"what's your name ? how old are you ?"
將字符"?"定義為新的行分隔符,就可以從邏輯上將該字符串劃分為2行,通過函數getline(string,2,2,"?")可以獲取第2句問候語的內容"how old are you"。
aws提供的character類系統函數主要用于對字符串進行處理,以下對其中一些常用函數進行簡要介紹。
返回ascⅱ碼(數值key)對應的字符。例如char(65)返回"a",char(97)返回"a"。大寫英文字母的ascⅱ碼范圍是65至90,小寫英文字母的ascⅱ碼范圍是97至122。
返回字符串string包含的字符個數。
返回與指定字符對應的ascⅱ碼,例如code(" ")返回空格的ascⅱ碼32。參數character可以是字符,也可以是鍵名。如果是鍵名,例如tab或enter,則不使用雙引號。
在字符串string中查找pattern指定的字符串,并返回第一個被匹配字符串的首字符在string中的位置。如果pattern指定的字符串未被找到,該函數返回0。例如查找路徑字符串中的字符“/”,可以使用:
result:= find("http:////", "c://windows//system32") --變量result的值為3
該函數嚴格區分大小寫,并且支持使用通配符:"*"代表0個或多個字符,"?"代表單個字符,"/"代表轉義符。如果需要針對通配字符進行查找,必須使用轉義符,例如:
result:= find("/?", "what's your name ? how old are you ?") --變量result的值為18
與函數find功能相似,但是查找方向是從右向左。例如
result:= find("http:////", "c://windows//system32") --變量result的值為11
result:= find("/?", "what's your name ? how old are you ?") --變量result的值為36
返回字符串string中的第n行(或第n行到m行)的內容。return(回車)是默認的行分隔符,但可以通過參數delim重新指定行分隔符。
返回字符串string中第n個單詞。由空格、回車、tab分隔的字符串被authorware認為是單詞。例如
result:= getword(2, "what's your name ? ") --變量result的值為"your"
返回字符串string中的總行數,其中不包含字符串尾部的空行。return(回車)是默認的行分隔符,但可以通過參數delim重新指定行分隔符。
返回與string對應的字符串,其中所有字母全部轉換為小寫字母。例如
result:= lowercase ("what's your name ?") --變量result的值為"what's your name ?"
將value從當前數據類型轉換為字符串類型。例如
result:= string(65) --變量result的值為"65"
返回字符串string的部分內容,起始位置和結束位置由參數first和last指定。例如
result:= substr ("what's your name ?", 8, 11) --變量result的值為"your"
返回與string對應的字符串,其中所有字母全部轉換為大寫字母。例如
result:= uppercase ("what's your name ?") --變量result的值為"what's your name ?"
返回字符串string中包含的單詞總數。例如
result:= wordcount("what's your name ?") --變量result的值為4
以下介紹由這些字符串處理函數構造的常用字符串處理過程,代碼的注釋部分解釋了相應程序語句的作用。
以下過程將變量string中的字符順序進行反轉。
string:="authorware 7 is coming"
reverse:="" --用于存放反轉后的字符串
repeat with i:=1 to charcount(string) --根據字符串中的字符數量開展循環
--從源字符串左側開始處理字符,最左側的字符放在目標字符串的最右側
reverse:=substr(string, i, i)^reverse
end repeat
上述語句執行之后,變量reverse的值為:"gnimoc si 0.7 erawrohtua"。本過程同樣適用于中文字符串。
以下過程將變量string中的單詞順序進行反轉。
wordreverse:="" --用于存放反轉后的字符串
repeat with i:=1 to wordcount(string) --根據字符串中的單詞數量開展循環
--從源字符串左側開始處理單詞,最左側的單詞放在目標字符串的最右側
wordreverse:=getword(i, string)^" "^wordreverse
end repeat
--去除字符串末尾多余的空格
wordreverse:=substr(wordreverse, 1, charcount(wordreverse)-1)
上述語句執行之后,變量wordreverse的值為:"coming is 7.0 authorware"。
以下過程將變量string中的字符以升序進行排序。
string:="authorware 7 is coming"
charlist:=[] --用于存放單獨的字符,便于利用sortbyvalue()函數進行排序
sorted:="" --用于存放排序后的字符串
ascending:=true --用于決定采用升序或降序排序
repeat with i:=1 to charcount(string)
--將字符串中的每個字符分別存放在不同的列表元素中
addlinear(charlist, substr(string, i, i))
end repeat
sortbyvalue(charlist ,ascending) --對列表元素進行排序
repeat with i:=1 to charcount(string)
sorted:=sorted^charlist[i] --將排序后的列表元素連接成為字符串
end repeat
上述語句執行之后,變量sorted的值為:" .07acaeghiimnoorrstuw"。如果將變量ascending賦值為false,則上述過程將變量string中的字符以降序進行排序。
以下過程將變量string中的大寫字母轉換為小寫字母,小寫字母轉換為大寫字母。
string:="authorware 7 is coming"
casereverse:="" --用于存放轉換后的字符串
repeat with i:=1 to charcount(string)
--以下三行內容屬于同一行程序代碼,根據每個字符的ascⅱ碼判斷是否進行大
--小寫轉換。大寫字母的ascⅱ碼范圍是65~90,小寫字母的ascⅱ碼范圍是97~122
casereverse:=casereverse^test(code(substr(string, i, ﹁
i))>64&code(substr(string, i, i))<91, lowercase(substr(string, i, ﹁
i)), (test(code(substr(string, i, i))>96& ﹁
code(substr(string, i, i))<123, uppercase(substr(string, i, i)),substr(string, i, i))))
end repeat
上述語句執行之后,變量casereverse的值為:"authorware 7 is coming"。
以下過程將變量string中的字符串進行簡單加密。加密原理是:依次獲取每個字符的ascⅱ碼字符串,并利用reverse過程反轉ascⅱ碼中的數值順序。例如字符"a"的ascⅱ碼字符串是"65",經反轉之后得到字符串"56"。
string:="authorware 7 is coming"
encode:="" --用于存放加密后的字符串
repeat with i:=1 to charcount(string)
ascii:=string(code(substr(string, i, i)))
--以下通過reverse過程,反轉ascⅱ碼中的數值順序
reverse:=""
repeat with j:=1 to charcount(ascii)
reverse:=substr(ascii, j, j)^reverse
end repeat
encode:=encode^reverse^" " --將反轉后的ascⅱ碼以空格分隔,連接成為字符串
end repeat
上述語句執行之后,變量encode的值為:"56 711 611 401 111 411 911 79 411 101 23 55 64 84 23 501 511 23 76 111 901 501 011 301 "。在aws中單個變量最多可存儲512k個字符,因此加密過程可以對長達128k的字符串進行加密。
以下過程將變量encode中的字符串(由上述加密過程形成)進行解密。解密是加密的逆過程,例如將字符串"56"反轉之后得到字符串"65",再由"65"得到字符"a"。以下過程同樣利用了reverse過程。
decode:="" --用于存放解密后的字符串
--根據加密字符串中的反轉ascⅱ碼數量開展循環
repeat with i:=1 to wordcount(encode)
ascii=getword(i, encode)
--以下通過reverse過程,得到正確的ascⅱ碼
reverse:=""
repeat with j:=1 to charcount(ascii)
reverse:=substr(ascii, j, j)^reverse
end repeat
decode:=decode^ char(reverse)
end repeat
上述語句執行之后,變量decode的值為:"authorware 7.0 is coming "。
上述過程全部以代碼片段的形式保存在chapter03文件夾下的ece7.xml文件中。讀者可以打開該文件,如圖3-36所示,將其中的代碼片段復制到自己的ece7.xml文件中(它通常位于c:/documents and settings/<用戶名>/application data/macromedia /authorware 7路徑中)。讀者也可以直接使用光盤中的ece7.xml文件替換自己的ece7.xml文件,并取消文件的只讀屬性,在此之前請做好ece7.xml文件的備份工作,這樣在authorware 7.0中就可以通過插入代碼片段的方式使用這些過程,如圖3-37所示。在使用代碼片段時,需要創建在上述過程中以粗體表示的自定義變量。
圖3-36 ece7.xml中的自定義過程
圖3-37 自定義代碼片段
可以將平時經常使用的過程都創建為代碼片段。這樣在以后的設計過程中,就不必重復輸入大量相同或相似的內容,從而可以有效地提高工作效率。但代碼片段通常只是一段代碼的框架,在插入到運算窗口中后還需要進行完善(例如創建或重新命名變量,避免和程序中已有的變量發生沖突)。
新聞熱點
疑難解答