来自get-content的多个文本文件的数组

时间:2015-08-06 01:29:02

标签: arrays powershell file-io

正如标题所示,我想将多个文本文件的内容保存为二维数组。

$script[0] = Get-Content "test1.txt"
$script[1] = Get-Content "test2.txt"

哪会导致错误Cannot index into a null array. 显然这是因为数组未初始化。

所以我试过了:

$script = @() 

for ($i = 0; $i -lt $scriptcount; $i++) 
{ 
  $script += @() 
}

并最终

for ($i = 0; $i -lt $scriptcount; $i++) 
{ 
  $script += @(@()) 
}

但上述所有内容都以错误Index was outside the bounds of the array.

结束

那么我该怎么做才能将这些文件保存到我的二维数组中呢?

一个小问题:使用这些2d数组是否可以生成数组计数?

因为$script.Count以第一个句子的长度而不是数组的数量结束。

2 个答案:

答案 0 :(得分:0)

尝试使用$script = -join (Get-Content $scriptfile),这应该使$script的值成为带有嵌入换行符的巨型字符串,而不是字符串数组。如果字符串本身没有换行符,则需要二进制-join$script = (Get-Content $scriptfile) -join "\n"

其他替代方案:

$script = Get-Content $filename | Out-String
$script = Get-Content -ReadCount 0 # default is 1, which reads each line
$script = [System.IO.File]::ReadAllLines($filename) | Out-string # or -join "\n"

官方文档可在MSDN上的about_join获得。

但是,根据文件的大小,这可能是内存密集型的。

答案 1 :(得分:0)

您遇到问题的原因是,如果文件包含多行文本,则Get-Content的返回值是一个字符串数组。

只需使用Get-Content的-Raw参数(可从3.0版获得),该参数将文件的整个内容读入字符串。

$script[0] = Get-Content "test1.txt" -Raw
$script[1] = Get-Content "test2.txt" -Raw

或者您可以将其分配到2d数组,就像

一样简单
$script = @((Get-Content "test1.txt), (Get-Content "test2.txt"))

现在$ script [0]包含test1.txt的内容,依此类推。

关于你的问题。元素总数可以通过

计算
$total=0;$script | % {$total += $_.Count};$total

如果您只需要使用Get-Content读取的文件数,则可以使用$script.Count