MC2020刚刚发布正式版,
中文用户这就吃了第一个bug了。有中文输出的行结尾的换行符可能被覆盖。。。如下图
文件名有中文,最后面的换行符被覆盖了,
刀具名有中文,最后面的换行符被覆盖了,
这是一个小插曲,
实际上也有很多机床系统也并不支持中文如Fanuc,brother,有中文的话可能 根本传不进程序 或者运行中报警。
虽然 我们编程可以尽量避免使用中文来规避,但我们是中国人啊凭啥不能用中文=,=刀具名文件名全英文的,编程有时还真看不明白。
好在出程序的时候还得经过后处理这一过程MC2020的后处理新增加了一个regex函数,用code export 可查
这个函数对会C python什么的就比较熟悉了,中文名正则表达式,用来处理各种文本字符相当强大,比如从一堆文本中抓网址,电话号码什么的。
MC里的正则表达式,就我个人初步使用所用感觉还是阉割版,也就只有三个方法,匹配单个字符串,匹配整个字符串,替换字符串。
回到中文的问题上来,就MC正则表达式的这三个方法也就足够我们处理了。
以下为源码配点广
sreplas: " " #用于将中文字符替换成什么?此处为空格Srobin
sreg : "A-Z0-9 +-/*//" #在引号里写什么字符就只允许输出什么字符
#A-Z表示26个大写字母,
#0-9表示数字
#+-/*//表示加减乘除,MP正则表达式转义字符是/
stemp : ""
sreult : ""
srreg : ""
sureg : ""
stext : "1sroibn- -2345345+SR*OBI/N-3SROBIN-4@???SROBIN罗宾 SROBIN第三adfaadsfasf第五5555"
punchn
stemp = ucase(stext)
sureg = "[" + sreg + "]+"
srreg = "[^" + sreg + "]+"
sreult = regex(sureg, stemp, 0)
while sreult <> stemp,
[
stemp = regex(srreg, sreplas, 2)
sreult = regex(sureg, stemp, 1)
]
*sreult
regex的三个用法都有用上了。
第一个模式为0
sreult = regex(sureg, stemp, 0)
sreult返回按表达式sureg规则匹配的stemp里的最前面的字符,后面的舍弃
sreult = regex(sureg, stemp, 1)
sreult返回按表达式sureg规则匹配的stemp的字符,但比较模式是和整个字符串相比较,也就是说setmp要完全匹配才有返回值和0模式下只返回第一次匹配的有所区别
stemp = regex(srreg, sreplas, 2)
用srcplas替换掉stemp里面,按srreg规则匹配的字符,stemp原值被修改。
解释完上面的再来看看这段源码怎么用
::找到所有可能有中文件的变量比如smcname$ 把输出 替换掉
比如Pheader文件头里的文件名输出
原文件
sopen_prn, "MCAM FILE - ", *smcpath$, *smcname$,*smcext$, sclose_prn, e$
红名部分为修改前后
sopen_prn, "MCAM FILE - ", *smcpath$, stext = smcname$, punchn, *smcext$, sclose_prn, e$
再如刀具列表里的 pstrtool
这个是处理刀具名的
pstrtool #Comment for tool
if strtool$ <> sblank,
[
strtool$ = ucase(strtool$)
*strtool$
]
红名部分为修改前后
pstrtool #Comment for tool
if strtool$ <> sblank,
[
strtool$ = ucase(strtool$)
stext = strtool$
punchn
]
改了前后的对比
完了,使用规则 就把把源码复制到任意地方(不要问我任意是什么地方)再把需要限制的变量名修改一下,stext = 输出变量名, punchn,
完
关注请加公众号: CAMROBIN
交流请加人个微信号:SROBIN