[AHK-] unicode 下 substr 擷取字串錯誤怎解?

作者: LPen (鳥人)   2020-02-02 12:03:49
我升級Autohotkey1.0 到 1.1 之後,原本的程式有發錯誤
最後才發現 substr 對文字處理有問題
原本的資料檔,是根據字串位置進行拆解.
例如:
MotherStr= 台灣口罩....20...G
FatherStr= USA_mask....30...0
ChildStr=substr(MotherStr,13,2)
SonStr=substr(FatherStr,13,2)
結果沒有辦法順利抓到中間的數字
請問這種情況下,要怎麼調整呢?
作者: panex0845 (胖克思)   2020-02-03 00:33:00
AHK本身賦值混亂的問題 下面改成 := 就行了
作者: LPen (鳥人)   2020-02-03 15:45:00
啊,我打錯了。但這樣,ChildStr 還是不能抓到20
作者: panex0845 (胖克思)   2020-02-03 16:56:00
應該是中文字符是2byte組成的問題 把檔案編碼從unicode改成ANSI應該就能解決了如果堅持在unicode下 可以試試看這個 取字節長度判斷有沒有中文 https://www.codepile.net/pile/mX9pVwg7如果是要取中間數字 其實我不推薦使用substr 很容易因資料結構改變 例如多一個 . 或是DE_mask少一個字符發生錯誤 如果確定結構都相同的話 也不是不能用就是了
作者: shala (沙羅)   2020-02-03 23:52:00
StrLen()的結果是多少?
作者: LPen (鳥人)   2020-02-04 20:28:00
有個問題如果 UncleStr:=台灣口罩公..20...G這樣抓出來的字串就變了。有解嗎?我的資料檔是產品名稱12byte,價格2 byte, 後面備註。
作者: shala (沙羅)   2020-02-04 22:31:00
ChildStr=substr(MotherStr,17,2)就會抓到了價格了
作者: panex0845 (胖克思)   2020-02-04 23:14:00
樓上一半不對 因為AHK賦值問題 會把substr視為字串 而且還要在那邊慢慢數 1 2 3 4 5 6 價格位置是17 有2位數不如直接自訂一個function去抓價格比較實際https://www.codepile.net/pile/9ZG9OA4Nhttps://i.imgur.com/tBtLrUq.png而且慢慢數還數錯位置....
作者: shala (沙羅)   2020-02-04 23:22:00
我傾向用....切出Array來取值常見的代碼編輯軟體都會數,不用人工數啦
作者: panex0845 (胖克思)   2020-02-04 23:29:00
可是價格位置17就不知道是怎麼數出來的了 應該是13或9
作者: LPH66 (-6.2598534e+18f)   2020-02-05 02:12:00
17 我猜是五個 UTF-8 中文字+兩點 (也就是誤解原 PO 編碼)
作者: LPen (鳥人)   2020-02-05 23:20:00
謝謝P大熱心提供範例。可以解決大部分問題。我是用來解析報表檔的資料。部分資料有佔滿12byte的。這大概就只能手動了。
作者: panex0845 (胖克思)   2020-02-06 01:15:00
如果資料結構固定 可以嘗試這個 應該可以有效解決問題https://www.codepile.net/pile/BOXGepm3
作者: papple23g (逆道者)   2020-03-13 14:01:00
提供一個正則表示法的解法RegExMatch(MotherStr,"\.*(\d+)\.*",price)MSGBOX % price1

Links booklink

Contact Us: admin [ a t ] ucptt.com