2016-04-06 33 views
1

Bir dizi büyük dosyada arama yapmaya ve metnin bölümlerini değiştirmeye çalışıyorum, ancak hatalara devam ediyorum. Özür (Büyük dosyaları hızlı okuma/yazma için .NET kullanın

ben bu çalıştı, ama bazen ben powershell bir 'bellek yetersiz' hatası alırsınız

#region The Setup 
$file = "C:\temp\168MBfile.txt" 

$hash = @{ 
    ham = 'bacon' 
    toast = 'pancakes' 
} 
#endregion The Setup 

$obj = [System.IO.StreamReader]$file 
$contents = $obj.ReadToEnd() 
$obj.Close() 

foreach ($key in $hash.Keys) { 
    $contents = $contents -replace [regex]::Escape($key), $hash[$key] 
} 
try { 
    $obj = [System.IO.StreamWriter]$file 
    $obj.Write($contents) 
} finally { 
    if ($obj -ne $null) { 
     $obj.Close() 
    } 
} 

sonra ben (İMKB) bu çalıştı, ancak bir pop-up mesajı ile çöküyor taraftan hata var) ve

$arraylist = New-Object System.Collections.ArrayList 
$obj = [System.IO.StreamReader]$file 
while (!$obj.EndOfStream) { 
    $line = $obj.ReadLine() 
    foreach ($key in $hash.Keys) { 
     $line = $line -replace [regex]::Escape($key), $hash[$key] 
    } 
    [void]$arraylist.Add($line) 
} 
$obj.Close() 
$arraylist 

ve son olarak İMKB'ye yeniden dener yok, ben böyle bir şeye rastladı, ama düzgün nasıl kullanılacağını emin değilim, ve ben bile emin değilim eğer bu konuda doğru yoldan gidersem. Herhangi bir öneri çok takdir edilecektir.

cevap

0

Sen 1000 readcount ile başlar ve bunu almak performansına dayalı çimdik:

get-content textfile -Readcount 1000 | 
    foreach-object {do something} | 
    set-content textfile 

veya

(get-content textfile -Readcount 1000) -replace 'something','withsomething' | 
set-content textfile 
+0

Tamam, ben herhangi satırları nasıl elde edersiniz ben bitirdim sonra İlk 1000 ile mi? –

+0

Yardım dosyasından: '-ReadCount Boru hattı üzerinden bir defada kaç tane içerik satırının gönderildiğini belirtir. Varsayılan değer 1'dir. 0 (sıfır) değeri, tüm içeriği bir kerede gönderir. Bu parametre, görüntülenen içeriği değiştirmez, ancak içeriği görüntülemek için gereken süreyi etkiler. ReadCount değeri arttıkça, ilk satırı döndürmek için gereken süre artar, ancak işlemin toplam süresi azalır. Bu, çok büyük öğelerde algılanabilir bir fark yaratabilir ' – Kiran

+0

Örneğim, okuduğum aynı dosyaya yazmaya çalışıyorumsa işe yarıyor mu? –

İlgili konular