我有一个文本文件,其中包含区域传输的结果&需要阅读每一行&将其拆分为一个数组以输出服务器名称列表&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
根据数据的格式,这可能不起作用,但在调用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
使用RegExp对象(MSDN)来匹配所需的字符串,而不是拆分字符串:
set regex = new RegExp
regexp.pattern = "^.*? "
set serverName = regex.execute(inputText).value
regex.pattern = " .*?$"
set ipAddress = regex.execute(inputText).value