У меня очень большой файл, необходимый для обработки (> 10 ГБ). Следовательно, мое использование StreamReader
и StreamWriter
. Мой файл содержит финансовый ряд рыночных цен в формате CSV, как это:Возможно построить динамический массив потоковедов в Powershell?
Date,Time,Open,High,Low,Close,UpVol,DownVol
Файл содержит года данных, и я хочу, чтобы создать один файл в год, и удалить последние два столбца. У меня есть сценарий, который делает это, если я пройду в Городе в качестве параметра. Я думал о вызове этого скрипта несколько раз, но ему нужно было бы прочитать очень большой файл несколько раз. Таким образом, я хочу только один раз прочитать файл и динамически переводить обработанные данные в разные файлы по строкам. Вот мой одногодичные сценарий:
param (
[String]$file=$(throw "Supply a file name to convert"),
[String]$year
);
$extension = [System.IO.Path]::GetExtension($file);
$outFile = $file.Substring(0, $file.LastIndexOf('.')) + "-" + $Year + $extension;
$reader = [System.IO.File]::OpenText($file);
$writer = New-Object System.IO.StreamWriter $outFile;
$reader.ReadLine() > $null # skip first line (old header)
$writer.WriteLine("Date,Time,Open,High,Low,Close"); # write required header
while (($line = $reader.ReadLine()) -ne $null) {
$data = $line.Split(",");
if ($data[0] -match $year) {
$writer.WriteLine($data[0] + "," + $data[1] + "," + $data[2] + "," + $data[3] + "," + $data[4] + "," + $data[5]);
}
}
$reader.Close();
$writer.Close();
Итак, я думаю, можно ли смотреть на $ данных [0] (дата), найти год с чем-то вроде этого:
$thisYear = $data[0].Split("/")[2];
, а затем динамически создать StreamWriter
за каждый год, который был найден? Должен ли я создать массив StreamWriters? Snag, я не знаю, сколько лет или сколько лет в файлах, прежде чем я их прочитаю. Это нужно делать «на лету». Если файл, который я читаю, содержит десять лет данных, я ожидал бы, что десять создателей потока будут созданы с десятью дополнительными файлами в конце с данными соответствующего года в нем.
Отлично! Благодарю. –