[基礎] AHK 中的字符串拼接和遍歷操作

字符串處理在多數(shù)編程語言中都是重頭戲吨些,AHK 自然也不例外鹏倘。AHK 在字符串處理方面還是很靈活的,如果掌握好了,寫起代碼來會事半功倍撮竿。本文先介紹最常用的操作:拼接和遍歷吮便。

字符串拼接

拼接恐怕是最常用的操作了,在 AHK 中也非常簡單幢踏,直接將兩個字符串用空格隔開就可以了髓需。

a := "abc"
b := 100
c := "def"
d := 123.456
e := 200

; f 的值是字符串 abc100anddef123.456
f := a b "and" c d
; g 的值是字符串 100200
g := b e

不管是字符串、整數(shù)還是浮點數(shù)房蝉,都可以用空格拼接成一個字符串僚匆。更神奇的是,空格可以和其他算術運算符一起使用搭幻。

a := 100
b := 200

; c 的值是 100150
c := a b - 50

其實 AHK 中整數(shù) 100200 和 字符串 "100200" 是沒有區(qū)別的咧擂,當整數(shù)用的時候就是 100200,當字符串用的時候就是 "100200"粗卜,當然內(nèi)部實現(xiàn)上會有一些優(yōu)化屋确。如果感覺無法接受的話,也可以認為整數(shù)和字符串是有區(qū)別的续扔,在實際使用中會自動相互轉(zhuǎn)換攻臀。

實際上,AHK 中 .(點運算符)是專門用來拼接字符串的纱昧,在某些情況還是不能省略的刨啸。

a := 300
b := 200

; c 的值是 100
c := a - b

; d 的值是 300-200
d := a . - b

正因為空格可以和其他算術運算符一起使用,使用起來可以很靈活识脆,為了避免歧義设联,空格只有在必要的情況(即這個表達式?jīng)]有其他的解釋辦法時)才起拼接作用。

子字符串遍歷

還有一個非常常見的操作灼捂,是遍歷一個字符串的子字符串离例。Loop, Parse 是專門用來做這個的。

Loop, Parse, InputVar [, Delimiters, OmitChars]

其中 InputVar 是變量名悉稠,不需要加 %宫蛆。Delimiters 是分隔符,OmitChars 是要忽略的字符的猛。

最簡單的場景就是遍歷字符串中的每一個字符耀盗。

text := "abcd"

Loop, Parse, text
{
    ; 依次彈出
    ; a
    ; b
    ; c
    ; d
    MsgBox, %A_LoopField%
}

Delimiters 和 OmitChars 都省略的情況,就是遍歷字符串中的每一個字符卦尊。

另外一個典型場景是依次處理一段文字的每一行叛拷。

text =
(
line1
line2
line3
)

Loop, Parse, text, `n, `r
{
    ; 依次彈出
    ; line1
    ; line2
    ; line3
    MsgBox, %A_LoopField%
}

這里 Delimiters 是 `n。`r 又是什么呢岂却?在類 UNIX 操作系統(tǒng)中忿薇,文本中的換行符就是 `n裙椭,但在 Windows 中,換行符是 `r`n煌恢。如果處理一段換行符是 `r`n 的文本骇陈,直接用 `n 分隔,會保留多余的 `r瑰抵,所以設置 OmitChars 為 `r 可以將其去掉∑髁可能有不仔細的朋友認為 Loop, Parse, text, \n, `r是將字符串同時按 \n 和 `r 來分隔二汛,這是錯誤的,`n 和 `r 的順序也不能顛倒拨拓。

除了按換行符肴颊,我們也經(jīng)常需要按其他符號分隔字符串,比如按空格渣磷,按逗號等婿着,就大同小異了。但需要注意空格和逗號有點特殊醋界,因為它們是特殊符號竟宋,寫法有一些特別。

text := "a b,c d:xxx"

Loop, Parse, text, %A_Space%
{
    ; 依次彈出
    ; a
    ; b,c
    ; d:xxx
    MsgBox, %A_LoopField%
}

Loop, Parse, text, `,
{
    ; 依次彈出
    ; a b
    ; c d:xxx
    MsgBox, %A_LoopField%
}

Loop, Parse, text, :
{
    ; 依次彈出
    ; a b,c d
    ; xxx
    MsgBox, %A_LoopField%
}

這里空格用的是 %A_Space%形纺,A_Space 是一個 AHK 的內(nèi)部變量丘侠,這樣需要用 % 取該變量的值。`, 是用轉(zhuǎn)義的方法取到的逗號字符逐样,因為直接寫逗號會被認為是參數(shù)的分隔符蜗字。類似的還有 `t 或者 %A_Tab% 是 Tab 等等,如果一個字符直接寫會報語法錯誤脂新,那么通常在前邊加個 ` 就可以了挪捕。以后我也會專門寫文章介紹轉(zhuǎn)義字符。至于冒號争便,就沒有什么特別级零,直接寫就可以了。

有些情況我們需要按字符串分隔始花,而不是按字符分隔妄讯,比如:

text := "abc()bcd(cde"

需要按 () 分隔 text。需要注意酷宵,這種情況這樣的寫法就是錯誤的了:

text := "abc()bcd(cde"

Loop, Parse, text, (, )
{
    ; 依次彈出
    ; abc
    ; bcd
    ; cde
    MsgBox, %A_LoopField%
}

一個可行的辦法亥贸,是先將字符串中的 () 替換成一個字符串里沒有的特殊字符,比如 @浇垦,然后再用這個特殊字符作為分隔符:

text := "abc()bcd(cde"

; StrReplace 函數(shù)是用來替換字符串的炕置,我們以后再詳細了解
text := StrReplace(text, "()", "@")

Loop, Parse, text, @
{
    ; 依次彈出
    ; abc
    ; bcd(cde
    MsgBox, %A_LoopField%
}

更多內(nèi)容

除了拼接和遍歷字符串,我們還需要進行查找、替換朴摊、匹配默垄、分隔、計算長度等操作甚纲,這涉及數(shù)量較多的字符串處理函數(shù)口锭,以后我們再詳細了解。

付費解決 Windows介杆、Linux鹃操、Shell、C春哨、C++荆隘、AHK、Python赴背、JavaScript椰拒、Lua 等領域相關問題,靈活定價凰荚,歡迎咨詢燃观,微信 ly50247。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浇揩,一起剝皮案震驚了整個濱河市仪壮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胳徽,老刑警劉巖积锅,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異养盗,居然都是意外死亡缚陷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門往核,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箫爷,“玉大人,你說我怎么就攤上這事聂儒』⒚” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵衩婚,是天一觀的道長窜护。 經(jīng)常有香客問我,道長非春,這世上最難降的妖魔是什么柱徙? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任缓屠,我火速辦了婚禮,結果婚禮上护侮,老公的妹妹穿的比我還像新娘敌完。我一直安慰自己,他們只是感情好羊初,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布滨溉。 她就那樣靜靜地躺著,像睡著了一般凳忙。 火紅的嫁衣襯著肌膚如雪业踏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天涧卵,我揣著相機與錄音,去河邊找鬼腹尖。 笑死柳恐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的热幔。 我是一名探鬼主播乐设,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绎巨!你這毒婦竟也來了近尚?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤场勤,失蹤者是張志新(化名)和其女友劉穎戈锻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體和媳,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡格遭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了留瞳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拒迅。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖她倘,靈堂內(nèi)的尸體忽然破棺而出璧微,到底是詐尸還是另有隱情,我是刑警寧澤硬梁,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布前硫,位于F島的核電站,受9級特大地震影響靶溜,放射性物質(zhì)發(fā)生泄漏开瞭。R本人自食惡果不足惜懒震,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗤详。 院中可真熱鬧个扰,春花似錦、人聲如沸葱色。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍狰。三九已至办龄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淋昭,已是汗流浹背俐填。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翔忽,地道東北人英融。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像歇式,于是被迫代替她去往敵國和親驶悟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容