Обработка файла данных большого объема с использованием powershell - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь выполнить операцию замены файла данных объемом 4 ГБ.Но я даже не могу прочитать этот файл из-за исключения памяти.Следующая команда выдает ошибку памяти.

$edwfile = (Get-Content C:\Users\tomgeorg\Desktop\edw_ord_extr_3x_SIQP_20181021.182305\edw_ord_extr_3x_SIQP_20181021.182305.dat -Raw ) 

Существуют ли альтернативные команды или приемы для обработки большого файла.

Я хочу запустить следующий шаблон замены для каждой строки в файле.в основном я хочу удалить все ненужные специальные символы.

-replace  "[$([char]0x00)-$([char]0x09)$([char]0x0B)-$([char]0x1F)$([char]0x7F)-$([char]0xFF)]","?"

сведения о системе

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Ниже приведен пример решения с потоками.Он читает файл построчно, а затем добавляет обновленную строку в новый файл.

$reader = [System.IO.StreamReader]"C:\temp\OriginalFile.txt"
$writer = [System.IO.StreamWriter]"C:\temp\UpdatedFile.txt"

while (!$reader.EndOfStream) {

$writer.WriteLine(($reader.ReadLine() -replace '\|', ";"))

}

$reader.Close()
$writer.Close()
0 голосов
/ 24 октября 2018

Предполагая, что вы ожидаете работать по одной строке за раз, вы захотите использовать конвейер для своей задачи:

$path = '~\Desktop\edw_ord_extr_3x_SIQP_20181021.182305\edw_ord_extr_3x_SIQP_20181021.182305.dat'
Get-Content -Path $path | ForEach-Object {
    # do something line-by-line with the file
} | # -> do something else with the output

Не зная что вы делаетес файлом трудно дать более полный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...