PowerShell'de bir dosyayı satır satır okumak istiyorum. Özellikle, dosya boyunca döngü yapmak, her satırı döngüdeki bir değişkende saklamak ve satır üzerinde bazı işlemler yapmak istiyorum.
Bash eşdeğerini biliyorum:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
PowerShell döngüleri hakkında çok fazla belge yok.
PowerShell döngüleri hakkında çok fazla dokümantasyon yok.
PowerShell'de döngülerle ilgili çok sayıda belge bulunmaktadır ve aşağıdaki yardım konularına göz atmak isteyebilirsiniz: about_For
, about_ForEach
, about_Do
, about_While
.
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
# Work here
}
}
Sorununuza yönelik bir başka deyimsel PowerShell çözümü, metin dosyasının satırlarını ForEach-Object
cmdlet'ine aktarmaktır:
Get-Content .\file.txt | ForEach-Object {
if($_ -match $regex){
# Work here
}
}
Döngü içinde regex eşleştirme yerine, sadece ilgilendiklerinizi filtrelemek için satırları Where-Object
üzerinden geçirebilirsiniz:
Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
# Work here
}
Get-Content
kötü performansa sahiptir; dosyayı belleğe tek seferde okumaya çalışır.
C# (.NET) dosya okuyucu her satırı tek tek okur
En İyi Performans
foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt"))
{
$line
}
Ya da biraz daha az performanslı
[System.IO.File]::ReadLines("C:\path\to\file.txt") | ForEach-Object {
$_
}
foreachdeyimi muhtemelen
ForEach-Object` deyiminden biraz daha hızlı olacaktır (daha fazla bilgi için aşağıdaki yorumlara bakın).