【问题标题】:VBscript searching for a string and displaying the characters in the second columnVBscript 搜索字符串并显示第二列中的字符
【发布时间】:2017-01-20 05:47:04
【问题描述】:

我是 VBscript 新手,正在寻求帮助。

一个文件夹中有很多日志文件。我想搜索一个字符串并将其 id 获取到一个变量。

日志文件包含如下多行。

第 8123 行:2 月 1 日 19:44:40.961 |信息 | JEZHckpTehtA-ADSW4T14T5 | 产品 | 10.86.99.108 | 2016 年 2 月 1 日 19:44:29.595 | EVNT=SWIdmst|DQLN=YN| DQLN=EQUAL_QUAL_QUEUE_GOHEAD_IT

我想搜索 QUAL_QUEUE_GOHEAD_IT 并将其 id JEZHckpTehtA-ADSW4T14T5 加载到变量并对其执行一些操作。

任何帮助都会被广泛接受。

【问题讨论】:

  • 这不是它在 SO 上的工作方式:您需要尝试显示您卡在哪里。让我们来看看你已经取得了什么成就。
  • 我正在使用 InStr 函数.. If InStr(oFSO.OpenTextFile(strFile).ReadAll, strSearchFor) > 0 然后我很惊讶如何将值 JEZHckpTehtA-ADSW4T14T5 加载到变量中。
  • 您可以使用 Split(YourString, "|") 将行分隔为其部分的数组。现在您需要使用 For Each 迭代数组 - 问题只是您如何识别所需的字符串?

标签: vbscript


【解决方案1】:

您可以使用正则表达式。以下是我开发的,请参阅http://regexr.com/3e7qr。

 INFO \| ([^\|]*) \|.*QUAL_QUEUE_GOHEAD_IT

在 vb 中使用这个

    testInput = "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_QUAL_QUEUE_GOHEAD_IT" & vbcrlf & _
    "Line 8123: Feb 01 19:44:40.961 | INFO | JEZHckpTehtA-ADSxxxT5 | PROD | 10.86.99.108 | Feb 01 2016 19:44:29.595 | EVNT=SWIdmst|DQLN=YN| DQLN=EQUAL_QUAL_QUEUE_GOHEAD_IT"

    Set re = New RegExp
    re.Pattern = "INFO \| ([^\|]*) \|.*QUAL_QUEUE_GOHEAD_IT"
    re.Global = True
    Set matches = re.Execute(testInput)
    If matches.Count > 0 Then
        msg = "Found " & matches.Count & " matches:" & vbCRLF
        For Each match In Matches
            msg = msg & "Found match """ & match.SubMatches(0) & vbcrlf
        Next
        msgbox msg, 0, "VBScript Regular Expression Tester"
    Else
        msgbox "No match", 0, "VBScript Regular Expression Tester"
    End Ifs

--- 通过文件读取更新----

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\temp\batches"
Set objFolder = objFSO.GetFolder(objStartFolder)

For Each objFile in objFolder.Files

        set oStream = objFile.OpenAsTextStream(1)
        If not oStream.AtEndOfStream Then
                contents = oStream.ReadAll
        End If
        oStream.Close

        Set re = New RegExp
        re.Pattern = "INFO \| ([^\|]*) \|.*QUAL_QUEUE_GOHEAD_IT"
        re.Global = True
        Set matches = re.Execute(contents)

        For Each match In Matches
                varid = match.SubMatches(0)
                ProcessMatch objFile.Path, varid
        Next

Next

sub ProcessMatch(path, id)
    Msgbox "Match " & id & " found in "  & path
end sub

【讨论】:

  • 谢谢先生上面的代码这是我想要的,我想设置一个值为match.SubMatches(0)的变量。你能帮我解决一下吗?
  • 只需做myVar = match.SubMatches(0)
  • 再次感谢您,先生,我正在尝试将日志文件放在我需要搜索的位置,例如 testInput = "C:\Users\hara\Desktop\lota\orene-0102.log" & vbcrlf 但它说发现不匹配,任何建议。
  • 您不是在搜索文件。您正在搜索文件路径。您需要做的是将日志文件的内容加载到 testInput 变量中。见stackoverflow.com/questions/3117121/…
  • 您好先生,我的要求是在文件夹 C:\Users\hara\Desktop\lota\ 中搜索 QUAL_QUEUE_GOHEAD_IT 字符串,其中包含许多日志文件,并将其 ID JEZHckpTehtA-ADSW4T14T5 加载到另一个变量并执行一些更多的行动。我已经粘贴了代码,请帮助我在哪里进行更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2013-09-22
  • 2020-09-27
  • 2015-08-15
相关资源
最近更新 更多