【发布时间】:2019-11-24 09:02:56
【问题描述】:
我尝试使用 PowerShell 将以下数组拆分为多个较小的数组。但是逐行输出文本文件需要很多时间。还有其他方法可以提高性能吗?
原始数组($FRUITARRAY):
所需的输出数组:
$ORANGERRAY:
$APPLEARRAY:
代码:
$FRUITARRAY = Get-Content 'D:\work\fruit.txt'
for ($i=1; $i -lt $FRUITARRAY.Length; $i++) {
if ($FRUITARRAY[$i].Split(',')[0].StartsWith('ORANGE')) {
$FRUITARRAY[$i] | Out-File "D:\work\ORANGE.TXT" -Append
}
if ($FRUITARRAY[$i].Split(',')[0].StartsWith('APPLE')) {
$FRUITARRAY[$i] | Out-File "D:\work\APPLE.TXT" -Append
}
}
$ORANGEARRAY = Get-Content "D:\work\ORANGE.TXT"
$APPLEARRAY = Get-Content "D:\work\APPLE.TXT"
【问题讨论】:
-
我试图重新格式化你的代码,但它太坏了,无法挽救(它不是有效的 powershell)。请使用当前运行缓慢的实际代码更新帖子
-
编辑了实际代码。文本文件中可能有 500k 行。谢谢...
-
如果您不需要这些文件(
ORANGE.TXT和APPLE.TXT),我强烈建议您将所有内容保存在内存中。您可以通过首先分配一个空数组来连接一个数组:`$ORANGEARRAY = @()`,然后添加新值,例如:if ($FRUITARRAY[$i].StartsWith('ORANGE')) {$ORANGEARRAY += $FRUITARRAY[$i]}。 (顺便说一句,如果你使用.StartsWith,那么吐出来是没有用的)
标签: arrays powershell split