?

Log in

No account? Create an account
 
 
Хвостат Хвостатыч
12 March 2019 @ 05:10 pm
Задача:
Вычитать файл N-ного объема и найти там строку "CATS".

Решение:
Вариант 1.
Для тех, кто никуда не спешит:
Get-Content -Path "C:\Files\somefile.txt" | Select-String -Pattern "CATS"

Плюсы: просто и тупо.
Минусы: УЖАСНО медленно.

Вариант 2.
Для тех у кого ОЧЕНЬ много памяти:
$myfile = Get-Content -Path "C:\Files\somefile.txt"
$myfile | Select-String -Pattern "CATS"

Плюсы: ОЧЕНЬ быстро.
Минусы: Жрёт ОЧЕНЬ много памяти.

Вариант 3.
Компромиссный:
$file = "C:\Files\somefile.txt"
$FileStream = New-Object -TypeName IO.FileStream -ArgumentList ($file), ([System.IO.FileMode]::Open), ([System.IO.FileAccess]::Read), ([System.IO.FileShare]::Read);
$ReadMyFile = New-Object -TypeName System.IO.StreamReader -ArgumentList ($FileStream, [System.Text.Encoding]::ASCII, $true);
$ReadMyFile.BaseStream.Position = 0;
while($ReadMyFile.EndOfStream -eq $false){
$line = $ReadMyFile.ReadLine()
$line | Select-String -Pattern "CATS"
}

Работает от 3 до 5 раз(!) быстрее, чем вариант 1.

__