PowerShell: StreamReader, ReadLine und leere Zeilen

Neulich musste ich recht lange Textdateien verarbeiten und griff dabei zur StreamReader-Klasse. Dabei musste ich feststellen, dass die oft zitierte Methode

$sread = [System.IO.StreamReader]::new($file)
while ($line = $sread.ReadLine()) {
    #Operationen...
}

vorzeitig abbricht, wenn eine komplett leere Zeile (also nur aus CR+LF auf Windows bzw. LF auf UNIX/Linux bestehend) angetroffen wird. Dann gibt es $null zurück, und die Schleife ist zu Ende.

Die offiziell dokumentierte Methode, das „richtig“ zu machen, ist Peek:

$sread = [System.IO.StreamReader]::new($file) 
while ($sread.Peek() -gt -1) {
    $line = $sread.ReadLine()
    #Operationen... 
}

Man kann aber auch die EndOfStream-Eigenschaft bemühen:

$sread = [System.IO.StreamReader]::new($file) 
while ($sread.EndOfStream -eq $false) {
    $line = $sread.ReadLine()
    #Operationen... 
}

Performance-technisch gaben sich beide Methoden in meinen Tests nichts.

Happy streamreading!

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.