[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