Vbscript 正则表达式,获取模式
有一个名为abc.log的日志文件,其中包含许多行,如下所示:Vbscript 正则表达式,获取模式,vbscript,Vbscript,有一个名为abc.log的日志文件,其中包含许多行,如下所示: Line 8123:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN | DQLN=EQUAL| QUEUE | GOHEAD IT 第8124行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-
Line 8123:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN | DQLN=EQUAL| QUEUE | GOHEAD IT
第8124行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=op。。。。。
第8127行:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst | DQLN=YN。。。。。。。。。。。
行8129:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=swimst | DQLN=YN | DQLN=Other|u编号
行8145:Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSW4T14T5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=swimst | DQLN=YN | Name=QID | Inputs=collname[allNum=12457845,oon=6842703020]| Outputid=00a4028a87c4473f,amid=2353.6,交易时间=125ms。。。。。。。。
第8198行:2月1日19:44:40.961 |信息| JEZHckpTehtA-ADSW4T14T5 |产品| 10.86.99.108 | 2016年2月1日19:44:29.595 |结束。。。。。
我需要在所有行中搜索QUAL\u QUEUE\u GOHEAD\u IT
,并获取其IDJEZHckpTehtA-ADSW4T14T5
。然后在所有行中搜索该id,如果在以该id开头的行中找到了DQLN=Other\u number
,并且在具有相同id的任何行中也找到了EOT\u Dealer\u PullAHead\u ETQ
,则
将同一id中存在的RuleName=GetPayoffInfo | Inputs=[accountNu…..
行提取到另一个记事本
我有下面的代码,它创建了一个新的textpad,但是里面什么都没有,它说的是nomatch
,但是日志文件包含代码中提到的所有字符串
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
'create a new text file
Set word_found1 = objFSO.CreateTextFile("C:\Users\hara\Desktop\tq\abc.log", True)
Set objFileToRead = objFSO.OpenTextFile _
("C:\Users\hara\Desktop\tq\testt1.txt", ForReading)
Do Until objFileToRead.AtEndOfStream
strFileText = objFileToRead.ReadLine
Set re = New RegExp
re.Pattern = "INFO \| ([^\|]*) \|.*QUAL_QUEUE_GOHEAD_IT"
re.Global = True
Set matches = re.Execute(strFileText)
If matches.Count > 0 Then
msg = "Found " & matches.Count & " matches:" & vbCRLF
For Each match In Matches
varid = match.SubMatches(0)
Next
word_found1.WriteLine strFileText
Else
MsgBox "No match", 0, "VBScript Regular Expression Tester"
End If
Loop
objFileToRead.Close
在您的测试数据中添加一些带有EOT\u Dealer\u PullAHead\u ETQ的行,以便我们能够正确解释您的问题。如果数据是分隔的,就像在示例数据中一样,则使用Split而不是RegEx。当您在循环中进行测试时,将为每一个不匹配的行获得一个不匹配的msgbox。请尝试添加
word\u found1.Close()
objFileToRead.Close()之后以便刷新写入流。还有一个在获得匹配时设置的标志。然后在最后,如果未设置该标志,则显示您的不匹配
MessageBox。您可以让我知道如何通过拆分函数搜索字符串QUAL_QUEUE_GOHEAD_来获取id JEZHckpTehtA-ADSW4T14T5。添加一些带有E的行吗OT_Dealer_PullAHead_ETQ添加到您的测试数据中,以便我们能够正确解释您的问题。如果数据是分隔的,就像在示例数据中一样,那么使用Split而不是RegEx。在循环中测试时,您将得到不匹配的每一行msgbox。请尝试添加word_found1.Close()
objFileToRead.Close()之后以便刷新写入流。还有一个在获得匹配时设置的标志。然后在最后,如果未设置该标志,则显示您的不匹配
MessageBox。您可以让我知道如何通过拆分函数搜索字符串QUAL_QUEUE_GOHEAD_获取id JEZHckpTehtA-ADSW4T14T5。。