level 1
G21
G90
T84
C000
G141H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
G140H000
(FIG1 2nd)
T85
C902
G142H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
G140H000
M00
M02
上面是一个文本文件的内容,请问大侠,怎样用回车符取代G140字符的上面整个一行?
2015年07月30日 14点07分
1
level 1
首先感谢GetSafeHwnd写的这个算法!这个算法已达到要求,非常感谢!
这个算法会一直替换到顶。其实我可能没说明白,我的意思是只把G140的上一行用“回车换行”替换掉留下一个空白的行(可以没有或有一个或多个空格也可以),因为只有G140上一行是无用的,其它行有用。这虽然用command1.enable=false临时解决了这个问题,但保存为文本文件后,如果第二次被其它人在不知情的情况下打开,会再次替换从而破坏文件。当然还可以在文件里记上标记什么的,但其它不知情的人还是可能破坏文件(留空行对文件的结构不造成破坏)。这样第一次G140上面一行替换成空白行,第二次G140上的空白行再次替换成空白行,第N次等于第二次的效果。如下:
G21
G90
T84
C000
G141H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G140H000
(FIG1 2nd)
T85
C902
G142H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G140H000
M00
M02
我再仔细看看算法,看能不能得到启发(其实本人看不怎么懂,能写出这几十行算法的应该在高手)
再次谢谢GetSafeHwnd!!!
2015年07月31日 14点07分
4
是空行不见了还是我的手机显示不出来???G140和上面一行有个空白行。
2015年07月31日 14点07分
level 1
'vb6使用正则表达式,‘工程’--‘引用’,勾选:‘Microsoft VBScript Regular Expressions 5.5’
Private Function reg_replace_str(ByRef s As String)
Dim reg_Ex
Set reg_Ex = New RegExp
reg_Ex.Pattern = ".+\nG140"
'reg_Ex.Global = True'再来个更简洁的,
'这个用false或注释掉,发现前几个reg_Ex没有set nothing 的bug
reg_replace_str = reg_Ex.Replace(s, vbTab & vbCrLf & "G140")
Set reg_Ex = Nothing
End Function
Private Sub Command1_Click()
Text1.Text = reg_replace_str(Text1.Text)
End Sub
2015年08月01日 02点08分
7
第二个G140的上一行没有成功
2015年08月01日 15点08分
两个以上不成功,一个文档G140数量是一个变量,一般很少超100,但有二三十个很正常,需要遍浏一篇txt内的所有G140,并删掉所有G140前一行,并在所有G140前一行插入空白行
2015年08月01日 16点08分
感谢GetSafeHwnd大神的代码,GetSafeHwnd大神的代码主要是完全的针对性,所以只对我的当前文本生效。GetSafeHwnd大神把第一次的代码在记事本中摊牌复制十次八次,G140数量就是这个情况。这个情况主要还是我没说清楚的原因吧,楼下Luosen56大神的算法我试过可行。希望GetSafeHwnd大神能用正则实现。
2015年08月01日 16点08分
用不同的方法实现
2015年08月01日 16点08分
吧务
level 13
Private Sub 修改文件()
Dim n1%, n2%, WJ1$, WJ2$, cW1$, cW2$
WJ1 = "数据1.TXT" : n1 = FreeFile
Open WJ1 For Input As #n1
WJ2 = "数据2.TXT" : n2 = FreeFile
Open WJ2 For Output As #n2
cW1 = ""
Do While Not Eof(n1)
Line Input #n1, cW2 : cW2 = Trim(cW2)
If Mid(cW2, 1, 4) = "G140" Then
Print #n2, ""
Else
If Len(cW1) >= 1 Then
Print #n2, cW1
End If
End If
cW1 = cW2
Loop
Print #n2, cW1
Close
cW1 = "已经保存修改好的数据文件:" & WJ2
MsgBox WJ1, 0 + 64, "修改文件内容"
End Sub
调用这个子过程即可。
2015年08月01日 03点08分
8
感谢Luosen56大神,这个过程处理很适合我的个人情况,谢谢
2015年08月01日 16点08分
演示结果在后面,再次谢谢Luosen56大神!!!
2015年08月01日 16点08分
level 1
下面是Luosen56大神的实现效果
G21
G90
T84
C000
G141H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
1
2
3
4
G140H000
(FIG1 2nd)
T85
C902
G142H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
6
7
8
9
G140H000
(FIG1 3nd)
T85
C902
G142H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
11
12
13
14
G140H000
(FIG4 4nd)
T85
C902
G142H000
G1 X10.Y20.
H001
G1 X20.Y25.:G1X13.Y29.
G1 X15.Y23.:G1X16.Y26.
G1 X12.Y18.:G1X22.Y24.
G1 X10.Y11.:G1X15.Y22.
16
17
18
19
G140H000
M00
M02
2015年08月01日 16点08分
10
我在G140前使用数字显示是为了观看效果,我试过用其它字符也能实现。
2015年08月01日 16点08分
给出的子过程就是【读二用一】法。
2015年08月02日 14点08分