标题: [问题求助] 【已解决】VBS如何实现数控代码文件的合并? [打印本页]
作者: raozhao2008 时间: 2015-8-18 21:01 标题: 【已解决】VBS如何实现数控代码文件的合并?
要求:将当前文件夹下的所有nc文件(不包括子目录)合并为000.nc。
以下101.nc ,102.nc,103.nc 是范例文件,000.nc为最终要求文件,此文件中不能有空行。
本人现从事数控编程行业,此数控代码是传输给数控机床执行,所以合并后的文件中数控代码部分必须和源文件绝对一致,
其它要修改部分详见我手动合并更改的000.nc文件。以“说明”开头的不要写入。
101.nc
- %O0100(D6A,T01,H01,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:101.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D6A,D6.00,R0.00#)
- (#TOOL NO.:T01,H01,D00#)
- (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
- (#ZMAX=20.20,ZMIN=-2.21#)
- (#TOTAL TIME=1.04MIN#)
- (#Creator:QQ328612167#)
- /G08 P1
- G54
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T01 M06
- M01
- (#TOOL NAME:D6A,D6.00,R0.00#)
- (#TOOL NO.:T01,H01#)
- (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
- G90 M09
- G00 X-8.525 Y3.602 S2500 M03
- G43 Z20.2 H01 M08
- Z.15
- G17 G01 Y1.802 F1500.
- G02 X-10.325 Y.002 I-1.8 J0.0
- G01 X-20.81
- G03 X-20.812 Y0.0 I0.0 J-.002
-
- 大量数据已省略
-
- G03 X-4.15 Y-11.05 I0.0 J3.2
- G01 Y-10.3
- G02 X-2.05 Y-8.2 I2.1 J0.0
- G01 X.535
- G00 Z20.2
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- M30
- %
复制代码
102.nc
- %
- O0100(D6B,T02,H02,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:102.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D6B,D6.00,R0.00#)
- (#TOOL NO.:T02,H02,D00#)
- (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
- (#ZMAX=20.50,ZMIN=-2.36#)
- (#TOTAL TIME=0.43MIN#)
- (#Creator:QQ328612167#)
- /G08 P1
- G54
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T02 M06
- M01
- (#TOOL NAME:D6B,D6.00,R0.00#)
- (#TOOL NO.:T02,H02#)
- (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
- G90 M09
- G00 X3.5 Y-1.5 S3500 M03
- G43 Z20.5 H02 M08
- Z.175
- G17 G01 Z-.325 F1500.
- X2.5 Z-.36
- X-23.15
- X-24.15 Z-.325
-
- 大量数据已省略
-
- X-15.535 Y-6.277 I-4.8 J0.0
- G01 X-14.086 Y-7.766
- X-16.449 Y-10.066 Z-2.245
- X-16.522 Y-10.138
- Z-1.745
- G00 Z20.
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- M30
- %
复制代码
103.nc
- %
- O0100(D4C1,T04,H04,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:103.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D4C1,D2.00,R0.00#)
- (#TOOL NO.:T04,H04,D00#)
- (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
- (#ZMAX=20.00,ZMIN=-1.36#)
- (#TOTAL TIME=0.26MIN#)
- (#Creator:QQ328612167#)
- /G08 P1
- G54
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T04 M06
- M01
- (#TOOL NAME:D4C1,D2.00,R0.00#)
- (#TOOL NO.:T04,H04#)
- (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
- G90 M09
- G00 X-4.018 Y-4.4 S4000 M03
- G43 Z20. H04 M08
- Z-1.36
- G02 X-3.325 Y-4. I.693 J-.4 F1500.
- G17 G01 X-2.
- G03 X.5 Y-1.5 I0.0 J2.5
- X-2. Y1. I-2.5 J0.0
-
- 大量数据已省略
-
- G01 X-8.35
- G02 X-9.043 Y-8.15 I0.0 J.8
- G00 Z20.
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- M30
- %
复制代码
000 - 副本.nc
- %
- 说明:以下为已合并的文件名
- (101.nc)
- (102.nc)
- (103.nc)
- (END)
- 说明:以下添加这2行
- /G08 P1
- G54
- 说明:以下所有文件中再无 /G08 P1 和 G54
- 说明:以下是101.nc的内容
-
- 说明:下行首去掉O0100,每个文件的时候这样处理
- (D6A,T01,H01,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:101.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D6A,D6.00,R0.00#)
- (#TOOL NO.:T01,H01,D00#)
- (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
- (#ZMAX=20.20,ZMIN=-2.21#)
- (#TOTAL TIME=1.04MIN#)
- (#Creator:QQ328612167#)
-
- 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T01 M06
- M01
- (#TOOL NAME:D6A,D6.00,R0.00#)
- (#TOOL NO.:T01,H01#)
- (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
- G90 M09
- G00 X-8.525 Y3.602 S2500 M03
- G43 Z20.2 H01 M08
- Z.15
- G17 G01 Y1.802 F1500.
-
- 大量数据已省略
-
- G00 Z20.2
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- M30
- %
- 说明:去掉以上2行 M30和%,每个文件的时候这样处理
- 说明:以下是102.nc的内容
-
- 说明:下行首去掉O0100,每个文件的时候这样处理
- (D6B,T02,H02,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:102.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D6B,D6.00,R0.00#)
- (#TOOL NO.:T02,H02,D00#)
- (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
- (#ZMAX=20.50,ZMIN=-2.36#)
- (#TOTAL TIME=0.43MIN#)
- (#Creator:QQ328612167#)
-
- 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T02 M06
- M01
- (#TOOL NAME:D6B,D6.00,R0.00#)
- (#TOOL NO.:T02,H02#)
- (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
- G90 M09
- G00 X3.5 Y-1.5 S3500 M03
- G43 Z20.5 H02 M08
- Z.175
- G17 G01 Z-.325 F1500.
- X2.5 Z-.36
- G00 Z20.
-
- 大量数据已省略
-
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- M30
- %
- 说明:去掉以上2行 M30和%,每个文件的时候这样处理
- 说明:以下是103.nc的内容
-
- 说明:下行首去掉O0100,每个文件的时候这样处理
-
- (D4C1,T04,H04,D00)
- (#MC TYPE:FANUC,MM#)
- (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
- (#NC NAME:103.nc)
- (#2015.08.04 14:17 星期2#)
- (#TOOL NAME:D4C1,D2.00,R0.00#)
- (#TOOL NO.:T04,H04,D00#)
- (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
- (#ZMAX=20.00,ZMIN=-1.36#)
- (#TOTAL TIME=0.26MIN#)
- (#Creator:QQ328612167#)
-
- 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
- G00 G91 G28 Z0 M09
- G28 Y0 M05
- G17 G21 G40 G49 G80
- T04 M06
- M01
- (#TOOL NAME:D4C1,D2.00,R0.00#)
- (#TOOL NO.:T04,H04#)
- (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
- G90 M09
- G00 X-4.018 Y-4.4 S4000 M03
- G43 Z20. H04 M08
- Z-1.36
- G02 X-3.325 Y-4. I.693 J-.4 F1500.
- G17 G01 X-2.
-
- 大量数据已省略
-
- G02 X-9.043 Y-8.15 I0.0 J.8
- G00 Z20.
- G00 G91 G28 Z0 S500 M09
- G28 Y0 M05
- 说明:合并文件结尾添加以下2行
- M30
- %
复制代码
在此先多谢各位看这么长的代码,费心了
作者: pcl_test 时间: 2015-8-18 23:39
本帖最后由 pcl_test 于 2015-8-19 00:02 编辑
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set files = fso.GetFolder(".").Files
- tmp1 = "%"&vbCrLf
- tmp2 = "(END)"&vbCrLf&"/G08 P1"&vbCrLf&"G54"&vbCrLf
- For Each file In files
- If LCase(Right(file.Name, 3)) = ".nc" Then
- tmp1 = tmp1&"("&file.Name&")"&vbCrLf
- Set f = fso.OpenTextFile(file,1)
- txt = txt&reTxT(f.ReadAll,"^/G08 P1\r?\nG54$|^%$")
- f.Close
- End If
- Next
- fso.CreateTextFile(".\000.nc", 2).WriteLine tmp1&tmp2&txt&"%"
- Msgbox "合并完成"
-
- Function reTxT(txt,patrn)
- Set re = New RegExp
- re.Pattern = patrn
- re.Global = True
- re.MultiLine = True
- reTxT = re.Replace(txt,"")
- End Function
复制代码
作者: raozhao2008 时间: 2015-8-19 09:12
回复 2# pcl_test
多谢pcl_test 您这么晚还为这伤脑,多谢多谢。因为昨晚我这边突然短路停电了,重新编辑的帖子没保存,一些重点没有说明完全,
现在我已重新编辑完帖子,重点部分已在000.nc中说明,还望您多费心了。
还有我已测试过您的代码,发现
作者: pcl_test 时间: 2015-8-19 11:20
回复 3# raozhao2008
居然不是gbk编码,打包上传你的nc文件,可发网盘分享链接
作者: raozhao2008 时间: 2015-8-19 11:36
回复 4# pcl_test
已上传
作者: pcl_test 时间: 2015-8-19 12:15
本帖最后由 pcl_test 于 2015-8-19 19:03 编辑
回复 3# raozhao2008
保存为bat文件运行- 1>1/* :
- echo off
- dir /b *.nc|cscript -nologo -e:jscript "%~0"
- exit /b
- */
-
- var loadText = function (strFileIn,strCharset){
- var stream = new ActiveXObject('ADODB.Stream');
- stream.Type = 2;
- stream.Mode = 3;
- stream.Charset = strCharset;
- stream.Open();
- stream.LoadFromFile(strFileIn);
- stream.Position = 0;
- return stream.ReadText;
- }
-
- var saveText = function (strArg,strFileOut,strCharset){
- var stream = new ActiveXObject('ADODB.Stream');
- stream.Mode = 3;
- stream.Type = 2;
- stream.Charset = strCharset;
- stream.Open();
- stream.WriteText(strArg);
- return stream.SaveToFile(strFileOut,2);
- }
-
- var txt = '';
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var StdIn = fso.GetStandardStream(0);
- var tmp1 = '%\r\n';
- var tmp2 = '(END)\r\n/G08 P1\r\nG54\r\n';
- while(!StdIn.AtEndOfStream) {
- var file = StdIn.ReadLine();
- tmp1 = tmp1+'('+file+')\r\n';
- txt = txt+loadText(file,'utf-8').replace(/^\/G08 P1\r?\nG54$|^M30\r?\n%$|^%$|^O0100/mg,'');
- }
- txt = tmp1+tmp2+txt+'M30\r\n%';
- saveText(txt.replace(/(\r?\n)+/g,'\r\n'),'000.nc','utf-8')
复制代码
作者: raozhao2008 时间: 2015-8-19 16:15
本帖最后由 raozhao2008 于 2015-8-19 16:19 编辑
回复 6# pcl_test
联网的肯定不行啊,转码的问题,是不是只有中文不能正常显示,其他的都没问题啊,
如果是这样,那就不用转码了
还有我现在想用右键合并:在*.nc文件的右键添加“合并NC程序”,启动时就执行以下bat,
- @echo off
- set PATH="%CD%"
- START "正在获取数据,请稍后..." /min "D:\合并NC程序.vbs" %PATH%
复制代码
它会将路径传递给vbs,
合并NC程序.vbs
- path = WScript.Arguments.Unnamed.Item(0)rem...这里的代码请完善以下,vbs我实在是看不懂、不会改,特别是替换的那一块麻烦您做些注释,多谢
复制代码
作者: pcl_test 时间: 2015-8-19 17:46
回复 7# raozhao2008
本版规则
1、求助时,务必在顶楼一次性把问题交代清楚,建议给出完整有针对性的样本,样本过大可发网盘分享链接。勿发无意义的标题
2、使用 code 标记把代码部分括起来(单击回复框的 <> 按钮,复制粘贴代码进去),以便复制。问题解决后,请编辑顶楼帖子在标题前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: raozhao2008 时间: 2015-8-19 17:52
回复 8# pcl_test
好滴,以后会注意
作者: pcl_test 时间: 2015-8-19 19:11
本帖最后由 pcl_test 于 2015-8-19 19:30 编辑
回复 9# raozhao2008
6楼已改为离线版
关于传路径的问题,然而……
bat- @echo off
- start "正在获取数据,请稍后..." /min "D:\合并NC程序.vbs" "%cd%"
复制代码
vbs- Set Ws = CreateObject("wscript.shell")
- If Wscript.Arguments.Count=0 Then
- Wscript.Quit
- End If
- msgbox Wscript.Arguments(0)
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |