有没有办法加快和优化这个.ps1脚本。它以大约1KB / s的速度写入文件,如果文件大于几MB,它会慢一些。
此脚本逐行读取并逐渐增加\< x但每个行号都重置。
这是我的第一个剧本,所以这就是为什么它如此野蛮。
$reader = [System.IO.File]::OpenText("file")
try {
for() {
$line = $reader.ReadLine()
if ($line -eq $null) { break }
$numbers = [System.Text.RegularExpressions.Regex]::Matches($line, "\<x")
for ($i = $numbers.Count - 1; $i -ge 0; $i--)
{
Write-Host ($numbers[$i].Index + $numbers[$i].Length)
$line = $line.Substring(0, $numbers[$i].Index) + "\<x" + ($i + 1).ToString() + $line.Substring($numbers[$i].Index + $numbers[$i].Length)
}
$line | Out-File "outfile" -Append
}
}
finally {
$reader.Close()
}
答案 0 :(得分:1)
文件有多大?最好将它完全加载到RAM中。
$lines = [System.IO.File]::ReadAllLines("file")
for ($i = 0; $i -lt $lines.Count; $i++) {
$numbers = [System.Text.RegularExpressions.Regex]::Matches($lines[$i], "\<x")
for ($n = $numbers.Count - 1; $n -ge 0; $n--) {
Write-Host ($numbers[$n].Index + $numbers[$n].Length)
$lines[$i] = $lines[$i].Substring(0, $numbers[$n].Index) + "\<x" + ($n + 1).ToString() + $lines[$i].Substring($numbers[$n].Index + $numbers[$n].Length)
}
}
[System.IO.File]::WriteAllLines("outfile", $lines)
答案 1 :(得分:0)
您不必每次都Out-File
重新打开并写入文件,而是使用StreamWriter
:
$reader = [System.IO.File]::OpenText("file")
# Create writer to output file
$writer = [System.IO.File]::CreateText("outfile")
try {
while(-not $reader.EndOfStream) {
$line = $reader.ReadLine()
$numbers = [System.Text.RegularExpressions.Regex]::Matches($line, "\<x")
for ($i = $numbers.Count - 1; $i -ge 0; $i--)
{
Write-Host ($numbers[$i].Index + $numbers[$i].Length)
$line = $line.Substring(0, $numbers[$i].Index) + "\<x" + ($i + 1).ToString() + $line.Substring($numbers[$i].Index + $numbers[$i].Length)
}
# Write line to output file
$writer.WriteLine($line)
}
}
catch{}
finally {
$reader.Close()
$writer.Close()
}