I tried to split below array into multiple smaller array using PowerShell. But it takes much time to output the text file line by line. Is there other way to improve the performance?
Original array ($FRUITARRAY):
ORANGE,1,4,5,6,7,8 APPLE,1,3,2,4,5 ORANGE,2,4,5,6,7,8 ORANGE,3,4,5,6,7,8 APPLE,2,3,2,4,5 ORANGE,4,4,5,6,7,8 ORANGE,5,4,5,6,7,8 APPLE,3,3,2,4,5 APPLE,4,3,2,4,5
Desired output arrays:
$ORANGERRAY:
ORANGE,1,4,5,6,7,8 ORANGE,2,4,5,6,7,8 ORANGE,3,4,5,6,7,8 ORANGE,4,4,5,6,7,8 ORANGE,5,4,5,6,7,8
$APPLEARRAY:
APPLE,1,3,2,4,5 APPLE,2,3,2,4,5 APPLE,3,3,2,4,5 APPLE,4,3,2,4,5
Code:
$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"
ORANGE.TXTandAPPLE.TXT), I would highly recommend to keep everything in memory. You might just concat an array by first assigning an empty array:` $ORANGEARRAY = @()` and than add the new values like:if ($FRUITARRAY[$i].StartsWith('ORANGE')) {$ORANGEARRAY += $FRUITARRAY[$i]}. (btw., there is no use spiting it if you use.StartsWith)