Vbscript 清除日志文件中的行
我有一个文件“D:\test.log”,它有两种样式之一。当用户收到以下消息时,如果用户处于脱机状态,则会出现此消息: [02:19:47]艾伯特兄弟(adama900):(保存于2016年3月31日星期四05:15:09)这是一条测试线 如果用户在收到消息时处于联机状态,则情况如下: 艾伯特兄弟(阿达玛900):这是一条测试线 我想做的是去掉多余的部分,如果是第一种或第二种样式,它会是这样的: Aimbot兄弟(adama900)这是一条测试线 然后将其放入消息框中 这是我的密码:Vbscript 清除日志文件中的行,vbscript,Vbscript,我有一个文件“D:\test.log”,它有两种样式之一。当用户收到以下消息时,如果用户处于脱机状态,则会出现此消息: [02:19:47]艾伯特兄弟(adama900):(保存于2016年3月31日星期四05:15:09)这是一条测试线 如果用户在收到消息时处于联机状态,则情况如下: 艾伯特兄弟(阿达玛900):这是一条测试线 我想做的是去掉多余的部分,如果是第一种或第二种样式,它会是这样的: Aimbot兄弟(adama900)这是一条测试线 然后将其放入消息框中 这是我的密码: Sub m
Sub main()
filename = "D:\Test.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename)
LNEVAL = f.ReadLine
LNENUM = 0
Do Until f.AtEndOfStream
For i = 1 To LNENUMs
f.ReadLine
Next
If InStr(LNEVAL, "(S") Then
LNEVAL = Left(LNEVAL, (Len("(S")+4))
MsgBox = LNEVAL
End If
Loop
f.Close
End Sub
这就是我到目前为止所拥有的。用替换件做你想做的事情相当简单。基本上,您要做的是从每行中删除三件事:
- 字符串开头方括号之间的子字符串
- 将名称与消息分隔的冒号,以及
- 该冒号后面的括号之间的可选子字符串
^\[.*?\]
匹配字符串开头的方括号和最短的字符数(直到结束方括号)
正则表达式\(Saved.*?\)
匹配一个左括号,后跟单词Saved
,以及最短的字符数(直到右括号)。但是,由于此部分是可选的,您需要通过将表达式放入非捕获组并向其添加?
修饰符((?:…)?
)来指示表达式可以零次或一次出现
将要保留的子匹配放在括号中,以创建捕获组
^\[.*?\](.*?:(?:\(已保存.*?\)(.*)
每个匹配行只包含捕获的组:
Set re=New RegExp
模式=。。。
Set f=fso.OpenTextFile(文件名)
直到f.AtEndOfStream
MsgBox更换(f.ReadLine,“$1$2”)
环
f、 接近
对现有代码的一些评论:
:始终跳过此循环,因为您将对于i=1到LNENUMs
设置为0。由于您只在LNEUMs
中执行f.ReadLine
循环,因此外部For
循环将成为一个无限循环,因为您从未将文件读到底do
的计算结果始终为6,因为字符串Len(“(S”)+4
的长度不会改变,所以可以用数值替换表达式(S
:函数不能以这种方式工作。请删除函数名和消息之间的MsgBox=LNEVAL
=
- 字符串开头方括号之间的子字符串
- 将名称与消息分隔的冒号,以及
- 该冒号后面的括号之间的可选子字符串
^\[.*?\]
匹配字符串开头的方括号和最短的字符数(直到结束方括号)
正则表达式\(已保存。*?\)
匹配一个左括号,后跟单词Saved
,以及最短的字符数(最多为右括号)。但是,由于此部分是可选的,您需要将表达式放入非捕获组并在其上附加?
修饰符((?:…)?
)
将要保留的子匹配放在括号中,以创建捕获组
^\[.*?\](.*?:(?:\(已保存.*?\)(.*)
每个匹配行只包含捕获的组:
Set re=New RegExp
模式=。。。
Set f=fso.OpenTextFile(文件名)
直到f.AtEndOfStream
MsgBox更换(f.ReadLine,“$1$2”)
环
f、 接近
对现有代码的一些评论:
:此循环始终被跳过,因为您将For i=1 To LNENUMs
设置为0。由于您只在该LNEUMs
循环内部执行For
,因此您的外部f.ReadLine
循环将成为一个无限循环,因为您从未将文件读到底do
的计算结果始终为6,因为字符串Len(“(S”)+4
的长度不会改变,所以可以用数值替换表达式(S
:函数不能以这种方式工作。请删除函数名和消息之间的MsgBox=LNEVAL
=