从文件中提取文本字符串

时间:2013-04-18 11:53:18

标签: vbscript

我正在编写一个实用程序,用于将网络上所有设备的所有系统信息收集到XML文档,其中一个值是某个软件版本号。不幸的是,版本号只存储在每台机器上的单个文本文件中(c:\ master.txt),更有趣的部分是,每个文本文件的格式都不同,具体取决于所使用的图像。

可以说

Product Number: 11dsSt2 BRANDONII,STNS6.0.2.200

下一个

Ver: 22335TS BOX2 S6.1.3.011,STN

等等。

我所做的是创建一个VBS,查找与版本模式匹配的数字模式,即

[A-Z]#.#.#.### 

这有效,但我只想输出那个模式,而不是整行。这是我的代码。有什么建议吗?

Const ForReading = 1
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "[A-Z]{1}[0-9]{1}.[0-9]{1}.[0-9]{1}.[0-9]{3}"
objregex.global = true
objregex.ignorecase = true
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\master.txt", ForReading)
Do Until objFile.AtEndOfStream
strSearchString = objFile.ReadLine
set colMatches = objRegEx.Execute(strSearchString)
If colMatches.Count > 0 Then
Addmatch
End If

Loop
objFile.Close
Sub Addmatch 'Creates a text file with the part number
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile1 = objFSO.OpenTextFile("C:\test.txt", ForAppending, True)
objFile1.Writeline strSearchString 
objFile1.Close

end sub

2 个答案:

答案 0 :(得分:1)

您正在存储从文件中读取的整行(您在strSearchString中),而不仅仅是匹配的文本。使用类似的东西(未经测试!):

if ColMatches.Count > 0 then
  AddMatch(ColMatches(0))      ' Just grab the matched text and pass to AddMatch
End If

Sub AddMatch(strMatchedText)   ' Change to accept parameter of text to write out
  ' Other code
  objFile1.Writeline strMatchedText
  objFile1.Close
End Sub

答案 1 :(得分:1)

使用第一个/唯一匹配来获取值,并将其传递给稍微修改过的Addmatch版本:

If colMatches.Count > 0 Then
   Addmatch colMatches(0).Value
End If

...

Sub Addmatch(sWhatToWriteLn) ' some truthful comment
  Const ForAppending = 8
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objFile1 = objFSO.OpenTextFile("C:\test.txt", ForAppending, True)
  objFile1.Writeline sWhatToWriteLn

...