2014-07-15 57 views
0

我正在寻找一种解析文本文件并将结果放入PowerShell中的数组的方法。解析文本文件并将内容放入数组Powershell

我知道select-string -path -pattern会得到所有匹配模式的字符串。但是如果我已经有了一个结构化的文本文件,可能是管道分隔的,每行都有新的条目。像这样:

prodServ1a prodServ1b prodServ1c

C:\目录\ serverFile.txt

我如何可以将每个服务器到一个数组在PowerShell中,我可以遍历?

回答

1

你说'管道分隔,像这样',但你的例子不是管道分隔。我会想象它是,那么你需要使用Import-CSV commandlet。例如如果数据文件包含此:

prodServ1a|4|abc 
prodServ1b|5|def 
prodServ1c|6|ghi 

那么这段代码:

$data = Import-Csv -Path test.dat -Header "Product","Cost","SerialNo" -Delimiter "|" 

将导入和拆分它,并添加页眉:

$data 

Product     Cost      SerialNo 
-------     ----      -------- 
prodServ1a     4       abc 
prodServ1b     5       def 
prodServ1c     6       ghi 

然后你可以使用

foreach ($item in $data) { 
    $item.SerialNo 
} 
+0

编辑:我错过了重要的-Delimiter位,使它与管道角色一起工作!更新。 – TessellatingHeckler

+0

快速的问题,有没有办法从项目对象匿名获取字符串?我试过$ item [n]和$ item.fieldn,而后者没有'通过我一个例外它仍然没有工作。我假设如果我将标题添加到导入命令,那是它所期望的? – SoftwareSavant

+0

@DmainEvent我不知道一个方法,并找不到一个快速查找。我建议你发布一个新问题,其他人也可以看到它。 (但是作为一个注释,你必须在头文件中使用头文件,或者使用'Import-CSV -Header ...',否则它会把文件的第一行作为头文件名,你会错过一排数据)。 – TessellatingHeckler

0

如果您的数据是平坦或非结构的ed,但有一个模式,例如用空格或逗号分隔,没有回车或换行符,可以使用Split()方法。

PS>$data = "prodServ1a prodServ1b prodServ1c" 

PS>$data 
prodServ1a prodServ1b prodServ1c 

PS>$data.Split(" ") 
prodServ1a 
prodServ1b 
prodServ1c 

特别适合有人向您发送由逗号分隔的IP地址列表。

相关问题