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