2012-03-30 155 views
0

我有一个文本文件,包含区域转移的结果&需要读取每一行&将其拆分成数组以输出服务器名称列表& IP地址。不过,我在分割数据时遇到了一些问题,因为我对空格分隔符的尝试似乎没有按照我想要的那样做。使用正则表达式分隔文本文件内容的分隔符?

样品输入:

machine1.fqdn.com. 86400 IN A 192.168.1.10 
machine2.fqdn.com. 86400 IN A 192.168.1.11 
machine3.fqdn.com. 86400 IN A 192.168.1.12 
machine4.fqdn.com. 86400 IN A 192.168.1.13 

脚本:

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("I:\testHarvestIF.txt", ForReading) 

Const ForReading = 1 

Do Until objFile.AtEndOfStream 
strNextLine = objFile.Readline 
arrServiceList = Split(strNextLine," ",-1,1) 
Wscript.Echo "Server name: " & arrServiceList(0) & vbCrLF & _ 
    " - IP Address: " & arrServiceList(2) 
Loop 

objFile.Close 

电流输出:

Server name: machine1.fqdn.com. 
IP Address: IN A 192.168.1.10 
Server name: machine2.fqdn.com. 
IP Address: IN A 192.168.1.11 
Server name: machine3.fqdn.com. 
IP Address: IN A 192.168.1.12 
Server name: machine4.fqdn.com. 
IP Address: IN A 192.168.1.13 

希望的输出:

Server name: machine1.fqdn.com. 
IP Address: 192.168.1.10 
Server name: machine2.fqdn.com. 
IP Address: 192.168.1.11 
Server name: machine3.fqdn.com. 
IP Address: 192.168.1.12 
Server name: machine4.fqdn.com. 
IP Address: 192.168.1.13 

有什么方法可以使用正则表达式来使用任意长度的空白作为分隔符?例如。

arrServiceList = Split(strNextLine,"^\s+",-1,1) 

预先感谢您可以提供任何帮助。

问候,

RB

回答

-1

用RegExp对象(MSDN)所要求的字符串匹配,而不是劈裂的字符串:

set regex = new RegExp 
    regexp.pattern = "^.*? " 
    set serverName = regex.execute(inputText).value 
    regex.pattern = " .*?$" 
    set ipAddress = regex.execute(inputText).value 
+0

对于我之前的回答,我很抱歉。我看着它,结果vbscript不支持从Match对象中提取捕获组。 (<-verify我) – Untitled 2012-03-30 12:48:50

+0

设置objFSO =的CreateObject( “Scripting.FileSystemObject的”) 集OBJFILE = objFSO.OpenTextFile( “I:\ test.txt的”,ForReading的) CONST ForReading的= 1 功能splitRE(strSource,图案) 用的CreateObject( “vbscript.regexp”) 。全球=真 .Pattern =模式 splitRE =斯普利特(.Replace(strSource, “ ”),“”) 尾随着 端功能 做,直到OBJFILE。 AtEndOfStream strNextLine = objFile.Readline arrServiceList = splitRE(strNextLine,“\ s +”) Wscript.Echo“服务器名称:”&arrServiceLis t(0)&“ - IP Address:”&arrServiceList(4) Loop objFile.Close – Pr0m3th3us 2012-03-30 13:25:36

0

这可能无法正常工作,这取决于格式您的数据,但可以尝试在调用Split之前用单个空格字符替换多余的空格:

Dim re : Set re = New RegExp 
re.Global = True 
re.Pattern = "\s+" 

Do Until objFile.AtEndOfStream 
strNextLine = re.Replace(objFile.Readline, " ") 
arrServiceList = Split(strNextLine," ",-1,1) 
Wscript.Echo "Server name: " & arrServiceList(0) & vbCrLF & _ 
    " - IP Address: " & arrServiceList(4) 
Loop