作者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/cn.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