Разделить содержимое текстового файла с помощью регулярных выражений для разделителей? - PullRequest
0 голосов
/ 30 марта 2012

У меня есть текстовый файл, содержащий результаты передачи зоны, и мне нужно прочитать каждую строку и разбить ее на массив, чтобы вывести список имен серверов и 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

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

Это может не работать, в зависимости от формата ваших данных, но вы можете попробовать заменить лишние пробелы одним пробелом перед вызовом 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
0 голосов
/ 30 марта 2012

Используйте объект RegExp ( MSDN ) для сопоставления требуемой строки вместо разделения строки:

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