VBS读取日志文件匹配关键词提取数字的代码运行异常求助
问题排查
你的代码存在三个核心错误,导致逻辑无法正常运行:
- 未声明
ForReading常量:纯VBS环境不会自动加载FileSystemObject的内置常量,未定义ForReading时该变量值为空,调用OpenTextFile会触发参数错误,文件读取流程根本无法执行,后续If判断自然不会触发。你也可以直接在OpenTextFile的第二个参数位置传值1,和定义常量效果一致。 - 正则规则编写错误:你写的
^[0-9]*$规则要求匹配内容必须整行全为数字,但你的目标行格式为数字 关键词,完全不符合匹配规则,无法提取到目标数字。 - 正则结果取值逻辑错误:
RE.Execute()方法返回的是匹配结果集合对象,不是直接的字符串值,需要访问集合内匹配项的属性,才能拿到提取到的数字内容。
修正后代码
Const ForReading = 1 Dim fso, logFile, line, reg, matchRes, keywordNum Set fso = CreateObject("Scripting.FileSystemObject") Set logFile = fso.OpenTextFile("C:\Folder\test.log", ForReading) Do While Not logFile.AtEndOfStream line = Trim(logFile.ReadLine()) If InStr(line, "Keyword") > 0 Then Set reg = New RegExp With reg ' 匹配行首1-2位数字,后接任意空白字符+目标关键词,避免匹配行内其他位置的无关数字 .Pattern = "^(\d{1,2})\s+Keyword" .Global = False .IgnoreCase = False ' 如果需要关键词不区分大小写,改为True即可 End With Set matchRes = reg.Execute(line) If matchRes.Count > 0 Then keywordNum = matchRes(0).SubMatches(0) MsgBox "提取到的数字值为:" & keywordNum End If ' 如果需要匹配文件内所有符合要求的行,删除下面的Exit Do即可 Exit Do End If Loop logFile.Close ' 释放对象资源 Set reg = Nothing Set logFile = Nothing Set fso = Nothing
补充说明:如果数字和关键词之间的分隔符不是空白字符,只需修改正则中
\s+部分为对应分隔符的匹配规则即可。
内容的提问来源于stack exchange,提问作者Corbinian
相关产品推荐
相关产品推荐

