Saya ingin membaca file baris demi baris di PowerShell. Secara khusus, saya ingin loop melalui file, menyimpan setiap baris dalam sebuah variabel dalam lingkaran, dan melakukan beberapa pengolahan pada baris.
Aku tahu Bash setara:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Tidak banyak dokumentasi di PowerShell loop.
Tidak banyak dokumentasi di PowerShell loop.
Dokumentasi pada loop di PowerShell berlimpah, dan anda mungkin ingin memeriksa topik berikut: about_For
, about_ForEach
, about_Do
, about_While
.
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
# Work here
}
}
Lain idiomatik PowerShell solusi untuk masalah anda adalah untuk pipa baris dari file teks ke ForEach-Objek
cmdlet:
Get-Content .\file.txt | ForEach-Object {
if($_ -match $regex){
# Work here
}
}
Bukan regex yang cocok di dalam loop, anda bisa pipa garis melalui Where-Object
untuk menyaring hanya orang-orang yang anda're tertarik pada:
Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
# Work here
}
Bisa-Content
memiliki kinerja yang buruk; itu mencoba untuk membaca file ke memori sekaligus.
C# (.NET) file reader membaca setiap baris satu persatu
Best Performace
foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt"))
{
$line
}
Atau sedikit kurang performant
[System.IO.File]::ReadLines("C:\path\to\file.txt") | ForEach-Object {
$_
}
The foreach
pernyataan kemungkinan akan sedikit lebih cepat dari ForEach-Objek
(lihat komentar di bawah untuk informasi lebih lanjut).