Powershell: Odczyt dużego pliku z wykorzystaniem metod .Net

11-sty-2022

Jeśli do przetworzenia jest dużo danych tekstowych i trzeba je np przefiltrować (coś w stylu polecenia grep). W takim przypadku przetwarzanie pliku przez Import-CSV albo Get-Content może być nieoptymalne, wolelibyśmy przetwarzać plik linia po linijce i … z pomocą mogą przyjść metody .NET

Poniższy przykład pochodzi z Reading And Writing To Files · Powerstart to Powershell reference book (dewin.me)

$path = "c:\d\myfile.txt"
$stream = [System.IO.StreamReader]::new($path)
while( -not $stream.EndOfStream) {
    $value =  [int]($stream.ReadLine())
    if (($value%10000) -eq 0) {
        write-host $value
    }
}
$stream.close()

Korzystając z klasy System.IO.StreamReader otwieramy plik, następnie przetwarzamy go aż do osiągnięcia końca pliku (while not end of stream) i przy każdym wykonaniu pobieramy jedną linijkę tekstu przez ReadLine(). Jeśli trzeba by było pobierać więcej danych w każdym kroku – można to zmienić.

Plik jest fizycznie odczytywany linia po linii z dysku, więc użycie pamięci przez program będzie zoptymalizowane.

 

Komentarze są wyłączone

Autor: Rafał Kraik