正如标题所示,我想将多个文本文件的内容保存为二维数组。
$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
以第一个句子的长度而不是数组的数量结束。
答案 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