Board logo

标题: [问题求助] 【已解决】VBS如何实现数控代码文件的合并? [打印本页]

作者: raozhao2008    时间: 2015-8-18 21:01     标题: 【已解决】VBS如何实现数控代码文件的合并?

要求:将当前文件夹下的所有nc文件(不包括子目录)合并为000.nc。   
以下101.nc ,102.nc,103.nc 是范例文件,000.nc为最终要求文件,此文件中不能有空行
     
本人现从事数控编程行业,此数控代码是传输给数控机床执行,所以合并后的文件中数控代码部分必须和源文件绝对一致,
   
其它要修改部分详见我手动合并更改的000.nc文件。以“说明”开头的不要写入。
   
101.nc
  1. %O0100(D6A,T01,H01,D00)
  2. (#MC TYPE:FANUC,MM#)
  3. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  4. (#NC NAME:101.nc)
  5. (#2015.08.04 14:17 星期2#)
  6. (#TOOL NAME:D6A,D6.00,R0.00#)
  7. (#TOOL NO.:T01,H01,D00#)
  8. (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
  9. (#ZMAX=20.20,ZMIN=-2.21#)
  10. (#TOTAL TIME=1.04MIN#)
  11. (#Creator:QQ328612167#)
  12. /G08 P1
  13. G54
  14. G00 G91 G28 Z0 M09
  15. G28 Y0 M05
  16. G17 G21 G40 G49 G80
  17. T01 M06
  18. M01
  19. (#TOOL NAME:D6A,D6.00,R0.00#)
  20. (#TOOL NO.:T01,H01#)
  21. (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
  22. G90 M09
  23. G00 X-8.525 Y3.602 S2500 M03
  24. G43 Z20.2 H01 M08
  25. Z.15
  26. G17 G01 Y1.802 F1500.
  27. G02 X-10.325 Y.002 I-1.8 J0.0
  28. G01 X-20.81
  29. G03 X-20.812 Y0.0 I0.0 J-.002
  30. 大量数据已省略
  31. G03 X-4.15 Y-11.05 I0.0 J3.2
  32. G01 Y-10.3
  33. G02 X-2.05 Y-8.2 I2.1 J0.0
  34. G01 X.535
  35. G00 Z20.2
  36. G00 G91 G28 Z0 S500 M09
  37. G28 Y0 M05
  38. M30
  39. %
复制代码

   
102.nc
  1. %
  2. O0100(D6B,T02,H02,D00)
  3. (#MC TYPE:FANUC,MM#)
  4. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  5. (#NC NAME:102.nc)
  6. (#2015.08.04 14:17 星期2#)
  7. (#TOOL NAME:D6B,D6.00,R0.00#)
  8. (#TOOL NO.:T02,H02,D00#)
  9. (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
  10. (#ZMAX=20.50,ZMIN=-2.36#)
  11. (#TOTAL TIME=0.43MIN#)
  12. (#Creator:QQ328612167#)
  13. /G08 P1
  14. G54
  15. G00 G91 G28 Z0 M09
  16. G28 Y0 M05
  17. G17 G21 G40 G49 G80
  18. T02 M06
  19. M01
  20. (#TOOL NAME:D6B,D6.00,R0.00#)
  21. (#TOOL NO.:T02,H02#)
  22. (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
  23. G90 M09
  24. G00 X3.5 Y-1.5 S3500 M03
  25. G43 Z20.5 H02 M08
  26. Z.175
  27. G17 G01 Z-.325 F1500.
  28. X2.5 Z-.36
  29. X-23.15
  30. X-24.15 Z-.325
  31. 大量数据已省略
  32. X-15.535 Y-6.277 I-4.8 J0.0
  33. G01 X-14.086 Y-7.766
  34. X-16.449 Y-10.066 Z-2.245
  35. X-16.522 Y-10.138
  36. Z-1.745
  37. G00 Z20.
  38. G00 G91 G28 Z0 S500 M09
  39. G28 Y0 M05
  40. M30
  41. %
复制代码

     
103.nc
  1. %
  2. O0100(D4C1,T04,H04,D00)
  3. (#MC TYPE:FANUC,MM#)
  4. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  5. (#NC NAME:103.nc)
  6. (#2015.08.04 14:17 星期2#)
  7. (#TOOL NAME:D4C1,D2.00,R0.00#)
  8. (#TOOL NO.:T04,H04,D00#)
  9. (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
  10. (#ZMAX=20.00,ZMIN=-1.36#)
  11. (#TOTAL TIME=0.26MIN#)
  12. (#Creator:QQ328612167#)
  13. /G08 P1
  14. G54
  15. G00 G91 G28 Z0 M09
  16. G28 Y0 M05
  17. G17 G21 G40 G49 G80
  18. T04 M06
  19. M01
  20. (#TOOL NAME:D4C1,D2.00,R0.00#)
  21. (#TOOL NO.:T04,H04#)
  22. (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
  23. G90 M09
  24. G00 X-4.018 Y-4.4 S4000 M03
  25. G43 Z20. H04 M08
  26. Z-1.36
  27. G02 X-3.325 Y-4. I.693 J-.4 F1500.
  28. G17 G01 X-2.
  29. G03 X.5 Y-1.5 I0.0 J2.5
  30. X-2. Y1. I-2.5 J0.0
  31. 大量数据已省略
  32. G01 X-8.35
  33. G02 X-9.043 Y-8.15 I0.0 J.8
  34. G00 Z20.
  35. G00 G91 G28 Z0 S500 M09
  36. G28 Y0 M05
  37. M30
  38. %
复制代码


000 - 副本.nc
  1. %
  2. 说明:以下为已合并的文件名
  3. (101.nc)
  4. (102.nc)
  5. (103.nc)
  6. (END)
  7. 说明:以下添加这2行
  8. /G08 P1
  9. G54
  10. 说明:以下所有文件中再无 /G08 P1 和 G54
  11. 说明:以下是101.nc的内容
  12. 说明:下行首去掉O0100,每个文件的时候这样处理
  13. (D6A,T01,H01,D00)
  14. (#MC TYPE:FANUC,MM#)
  15. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  16. (#NC NAME:101.nc)
  17. (#2015.08.04 14:17 星期2#)
  18. (#TOOL NAME:D6A,D6.00,R0.00#)
  19. (#TOOL NO.:T01,H01,D00#)
  20. (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
  21. (#ZMAX=20.20,ZMIN=-2.21#)
  22. (#TOTAL TIME=1.04MIN#)
  23. (#Creator:QQ328612167#)
  24. 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
  25. G00 G91 G28 Z0 M09
  26. G28 Y0 M05
  27. G17 G21 G40 G49 G80
  28. T01 M06
  29. M01
  30. (#TOOL NAME:D6A,D6.00,R0.00#)
  31. (#TOOL NO.:T01,H01#)
  32. (#XYSTOCK=0.20MM,ZSTOCK=0.15MM#)
  33. G90 M09
  34. G00 X-8.525 Y3.602 S2500 M03
  35. G43 Z20.2 H01 M08
  36. Z.15
  37. G17 G01 Y1.802 F1500.
  38. 大量数据已省略
  39. G00 Z20.2
  40. G00 G91 G28 Z0 S500 M09
  41. G28 Y0 M05
  42. M30
  43. %
  44. 说明:去掉以上2行 M30和%,每个文件的时候这样处理
  45. 说明:以下是102.nc的内容
  46. 说明:下行首去掉O0100,每个文件的时候这样处理
  47. (D6B,T02,H02,D00)
  48. (#MC TYPE:FANUC,MM#)
  49. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  50. (#NC NAME:102.nc)
  51. (#2015.08.04 14:17 星期2#)
  52. (#TOOL NAME:D6B,D6.00,R0.00#)
  53. (#TOOL NO.:T02,H02,D00#)
  54. (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
  55. (#ZMAX=20.50,ZMIN=-2.36#)
  56. (#TOTAL TIME=0.43MIN#)
  57. (#Creator:QQ328612167#)
  58. 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
  59. G00 G91 G28 Z0 M09
  60. G28 Y0 M05
  61. G17 G21 G40 G49 G80
  62. T02 M06
  63. M01
  64. (#TOOL NAME:D6B,D6.00,R0.00#)
  65. (#TOOL NO.:T02,H02#)
  66. (#XYSTOCK=0.30MM,ZSTOCK=0.00MM#)
  67. G90 M09
  68. G00 X3.5 Y-1.5 S3500 M03
  69. G43 Z20.5 H02 M08
  70. Z.175
  71. G17 G01 Z-.325 F1500.
  72. X2.5 Z-.36
  73. G00 Z20.
  74. 大量数据已省略
  75. G00 G91 G28 Z0 S500 M09
  76. G28 Y0 M05
  77. M30
  78. %
  79. 说明:去掉以上2行 M30和%,每个文件的时候这样处理
  80. 说明:以下是103.nc的内容
  81. 说明:下行首去掉O0100,每个文件的时候这样处理
  82. (D4C1,T04,H04,D00)
  83. (#MC TYPE:FANUC,MM#)
  84. (#PART NAME:F:\x10\foxconn\2015\LF-HX-14049-DDQ-01-Ti.prt#)
  85. (#NC NAME:103.nc)
  86. (#2015.08.04 14:17 星期2#)
  87. (#TOOL NAME:D4C1,D2.00,R0.00#)
  88. (#TOOL NO.:T04,H04,D00#)
  89. (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
  90. (#ZMAX=20.00,ZMIN=-1.36#)
  91. (#TOTAL TIME=0.26MIN#)
  92. (#Creator:QQ328612167#)
  93. 说明:此处删除 G08 P1 和 G54,每个文件的时候这样处理
  94. G00 G91 G28 Z0 M09
  95. G28 Y0 M05
  96. G17 G21 G40 G49 G80
  97. T04 M06
  98. M01
  99. (#TOOL NAME:D4C1,D2.00,R0.00#)
  100. (#TOOL NO.:T04,H04#)
  101. (#XYSTOCK=0.00MM,ZSTOCK=-1.00MM#)
  102. G90 M09
  103. G00 X-4.018 Y-4.4 S4000 M03
  104. G43 Z20. H04 M08
  105. Z-1.36
  106. G02 X-3.325 Y-4. I.693 J-.4 F1500.
  107. G17 G01 X-2.
  108. 大量数据已省略
  109. G02 X-9.043 Y-8.15 I0.0 J.8
  110. G00 Z20.
  111. G00 G91 G28 Z0 S500 M09
  112. G28 Y0 M05
  113. 说明:合并文件结尾添加以下2行
  114. M30
  115. %
复制代码



在此先多谢各位看这么长的代码,费心了
作者: pcl_test    时间: 2015-8-18 23:39

本帖最后由 pcl_test 于 2015-8-19 00:02 编辑
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set files = fso.GetFolder(".").Files
  3. tmp1 = "%"&vbCrLf
  4. tmp2 = "(END)"&vbCrLf&"/G08 P1"&vbCrLf&"G54"&vbCrLf
  5. For Each file In files
  6.     If LCase(Right(file.Name, 3)) = ".nc" Then
  7.         tmp1 = tmp1&"("&file.Name&")"&vbCrLf
  8.         Set f = fso.OpenTextFile(file,1)
  9.         txt = txt&reTxT(f.ReadAll,"^/G08 P1\r?\nG54$|^%$")
  10.         f.Close
  11.     End If
  12. Next
  13. fso.CreateTextFile(".\000.nc", 2).WriteLine tmp1&tmp2&txt&"%"
  14. Msgbox "合并完成"
  15. Function reTxT(txt,patrn)
  16.     Set re = New RegExp
  17.     re.Pattern = patrn
  18.     re.Global = True
  19.     re.MultiLine = True
  20.     reTxT = re.Replace(txt,"")
  21. 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>1/* :
  2. echo off
  3. dir /b *.nc|cscript -nologo -e:jscript "%~0"
  4. exit /b
  5. */
  6. var loadText = function (strFileIn,strCharset){
  7.     var stream = new ActiveXObject('ADODB.Stream');
  8.     stream.Type = 2;
  9.     stream.Mode = 3;
  10.     stream.Charset = strCharset;
  11.     stream.Open();
  12.     stream.LoadFromFile(strFileIn);
  13.     stream.Position = 0;
  14.     return stream.ReadText;
  15. }
  16. var saveText = function (strArg,strFileOut,strCharset){
  17.     var stream = new ActiveXObject('ADODB.Stream');
  18.     stream.Mode = 3;
  19.     stream.Type = 2;
  20.     stream.Charset = strCharset;
  21.     stream.Open();
  22.     stream.WriteText(strArg);
  23.     return stream.SaveToFile(strFileOut,2);
  24. }
  25. var txt = '';
  26. var fso = new ActiveXObject('Scripting.Filesystemobject');
  27. var StdIn = fso.GetStandardStream(0);
  28. var tmp1 = '%\r\n';
  29. var tmp2 = '(END)\r\n/G08 P1\r\nG54\r\n';
  30. while(!StdIn.AtEndOfStream) {
  31.     var file = StdIn.ReadLine();
  32.     tmp1 = tmp1+'('+file+')\r\n';
  33.     txt = txt+loadText(file,'utf-8').replace(/^\/G08 P1\r?\nG54$|^M30\r?\n%$|^%$|^O0100/mg,'');
  34. }
  35. txt = tmp1+tmp2+txt+'M30\r\n%';
  36. 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,
  
  1. @echo off
  2. set PATH="%CD%"
  3. START "正在获取数据,请稍后..." /min "D:\合并NC程序.vbs" %PATH%
复制代码

它会将路径传递给vbs,
合并NC程序.vbs
  1. 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
  1. @echo off
  2. start "正在获取数据,请稍后..." /min "D:\合并NC程序.vbs" "%cd%"
复制代码
vbs
  1. Set Ws = CreateObject("wscript.shell")
  2. If Wscript.Arguments.Count=0 Then
  3. Wscript.Quit
  4. End If
  5. msgbox Wscript.Arguments(0)
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2