Моя проблема в том, что мне нужно разделить файл, который является только 1 строкой, но очень длинным. Я пытаюсь запустить (cat $filename).split("'")
, но это дает мне исключение outofmemory. Есть ли способ просмотреть файл, который он не пытается загрузить файл сразу, поэтому я могу разделить одну строку. Для справки размер файла, о котором идет речь, составляет 46 МБ.Исключение версии Powershell out of memory в длинном однострочном файле
1
A
ответ
1
У меня была аналогичная проблема, работающая с большими файлами пару лет назад. Если предположить, что ни один из отдельных строк не превышает предельный размер, это должно работать:
$InputFileName = 'C:\Temp\Temp.txt'
$StreamReader = New-Object System.IO.StreamReader($InputFileName, [System.Text.Encoding]::ASCII)
$Queue = New-Object System.Collections.Generic.Queue[char]
[string[]]$Array = @()
while ($StreamReader.EndOfStream -ne $True)
{
$CurrentChar = $StreamReader.Read()
if ($CurrentChar -eq [char]"'")
{
[string]$Element = ''
while ($Queue.Count -gt 0)
{
$Element += $Queue.Dequeue()
}
$Array += $Element
}
else
{
$Queue.Enqueue($CurrentChar)
}
}
$StreamReader.Close()
Это создает первую в коллекцию, первый выход (FIFO), что очереди ваших персонажей, пока '
не встречаются. Затем очереди символов считываются в строку, которая добавляется в массив.
+0
Да, я закончил делать что-то подобное, но это занимает много времени, но я ничего не могу сделать, потому что баран по какой-то причине был действительно низким на компьютере, который я использовал – Adlis
Что-то вроде этого, вероятно, будет полезно http://stackoverflow.com/questions/4533570/in-powershell-how-do-i-split-a-large-binary-file – DejaVuSansMono
несколько странно, что файл размером 46 МБ выбрасывая исключение из памяти, является '(cat $ filename) .split (" '")' всего вашего кода или есть другие операции? –
Извините, должно было добавить остальную часть того, что я делал здесь, где {$ _ -match "'^EQD | '^ MEA"} out-file -encoding default work/templist – Adlis