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

看板EzHotKey作者 (鳥人)時間4年前 (2020/02/02 12:03), 編輯推噓11(11022)
留言33則, 5人參與, 4年前最新討論串1/1
我升級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://www.ptt.cc/bbs/EzHotKey/M.1580616231.A.A6B.html

02/03 00:33, 4年前 , 1F
AHK本身賦值混亂的問題 下面改成 := 就行了
02/03 00:33, 1F

02/03 15:45, 4年前 , 2F
啊,我打錯了。但這樣,ChildStr 還是不能抓到20
02/03 15:45, 2F

02/03 16:56, 4年前 , 3F
應該是中文字符是2byte組成的問題 把檔案編碼從unicode
02/03 16:56, 3F

02/03 16:56, 4年前 , 4F
改成ANSI應該就能解決了
02/03 16:56, 4F

02/03 17:58, 4年前 , 5F
如果堅持在unicode下 可以試試看這個 取字節長度判斷
02/03 17:58, 5F

02/03 17:59, 4年前 , 6F
02/03 17:59, 6F

02/03 18:07, 4年前 , 7F
如果是要取中間數字 其實我不推薦使用substr 很容易因
02/03 18:07, 7F

02/03 18:08, 4年前 , 8F
資料結構改變 例如多一個 . 或是DE_mask少一個字符
02/03 18:08, 8F

02/03 18:09, 4年前 , 9F
發生錯誤 如果確定結構都相同的話 也不是不能用就是了
02/03 18:09, 9F

02/03 23:52, 4年前 , 10F
StrLen()的結果是多少?
02/03 23:52, 10F

02/04 20:28, 4年前 , 11F
有個問題如果 UncleStr:=台灣口罩公..20...G
02/04 20:28, 11F

02/04 20:29, 4年前 , 12F
這樣抓出來的字串就變了。有解嗎?
02/04 20:29, 12F

02/04 20:32, 4年前 , 13F
我的資料檔是產品名稱12byte,價格2 byte, 後面備註。
02/04 20:32, 13F

02/04 22:31, 4年前 , 14F
ChildStr=substr(MotherStr,17,2)
02/04 22:31, 14F

02/04 22:31, 4年前 , 15F
就會抓到了價格了
02/04 22:31, 15F

02/04 23:14, 4年前 , 16F
樓上一半不對 因為AHK賦值問題 會把substr視為字串 而
02/04 23:14, 16F

02/04 23:15, 4年前 , 17F
且還要在那邊慢慢數 1 2 3 4 5 6 價格位置是17 有2位數
02/04 23:15, 17F

02/04 23:18, 4年前 , 18F
不如直接自訂一個function去抓價格比較實際
02/04 23:18, 18F

02/04 23:18, 4年前 , 19F

02/04 23:20, 4年前 , 20F

02/04 23:22, 4年前 , 21F
而且慢慢數還數錯位置....
02/04 23:22, 21F

02/04 23:22, 4年前 , 22F
我傾向用....切出Array來取值
02/04 23:22, 22F

02/04 23:25, 4年前 , 23F
常見的代碼編輯軟體都會數,不用人工數啦
02/04 23:25, 23F

02/04 23:29, 4年前 , 24F
可是價格位置17就不知道是怎麼數出來的了 應該是13或9
02/04 23:29, 24F

02/05 02:12, 4年前 , 25F
17 我猜是五個 UTF-8 中文字+兩點 (也就是誤解原 PO 編碼)
02/05 02:12, 25F

02/05 23:20, 4年前 , 26F
謝謝P大熱心提供範例。可以解決大部分問題。
02/05 23:20, 26F

02/05 23:29, 4年前 , 27F
我是用來解析報表檔的資料。部分資料有佔滿12byte的。
02/05 23:29, 27F

02/05 23:30, 4年前 , 28F
這大概就只能手動了。
02/05 23:30, 28F

02/06 01:15, 4年前 , 29F
如果資料結構固定 可以嘗試這個 應該可以有效解決問題
02/06 01:15, 29F

02/06 01:15, 4年前 , 30F

03/13 14:01, 4年前 , 31F
提供一個正則表示法的解法
03/13 14:01, 31F

03/13 14:01, 4年前 , 32F
RegExMatch(MotherStr,"\.*(\d+)\.*",price)
03/13 14:01, 32F

03/13 14:01, 4年前 , 33F
MSGBOX % price1
03/13 14:01, 33F
文章代碼(AID): #1UDaedfh (EzHotKey)
文章代碼(AID): #1UDaedfh (EzHotKey)