Я пытаюсь разобрать 10 ГБ файлов .dat на что-то узнаваемое в .NET. Разделитель столбцов - это «~», а EOL - это «++ EOL ++». Я знаю, как обрабатывать разделитель, но я не могу найти простой способ обработать «++ EOL ++», когда в файле нет фактических разрывов строк. Можно ли с этим справиться с помощью опции в FileHelpers, или мне придется написать что-то особенное?
Изменить символ EOL FileHelpers
comment
+1 Хороший вопрос, похоже, в исходном коде нет ничего очевидного, что помогло бы решить вашу проблему (я, наверное, что-то пропустил). В качестве быстрого и грязного решения вы можете просто заменить строку.
- person M.Babcock   schedule 12.01.2012
comment
Я всегда думал об этом, но хотел убедиться, что не упускаю что-то встроенное.
- person Scott   schedule 13.01.2012
Ответы (1)
Нет FileHelpers не поддерживает файлы с необычными последовательностями символов конца строки по умолчанию.
Вероятно, было бы проще всего предварительно проанализировать файл и заменить последовательности EOL. Однако это расширяемая библиотека, поэтому вы можете создать свой собственный подкласс DataStorage. По сути, вам придется переопределить
public override object[] ExtractRecords()
{
using (MyStreamReader reader = new MyStreamReader(fileName, base.mEncoding, true, 102400))
{
T[] localArray = this.ReadStream(reader, maxRecords);
reader.Close();
return localArray;
}
}
а затем создайте новый класс MyStreamReader, который будет идентичен (к сожалению sealed
) InternalStreamReader
, за исключением ReadLine
, который содержит код EOL
switch (ch)
{
case '\n':
case '\r':
etc...
}
(Кстати, я имею в виду исходный код для FileHelpers 2.9.9. Версия 2.0.0, похоже, использует System.IO.StreamReader
, поэтому вы можете просто создать подкласс вместо дублирования InternalStreamReader
.
person
shamp00
schedule
13.01.2012