Изменить символ EOL FileHelpers

Я пытаюсь разобрать 10 ГБ файлов .dat на что-то узнаваемое в .NET. Разделитель столбцов - это «~», а EOL - это «++ EOL ++». Я знаю, как обрабатывать разделитель, но я не могу найти простой способ обработать «++ EOL ++», когда в файле нет фактических разрывов строк. Можно ли с этим справиться с помощью опции в FileHelpers, или мне придется написать что-то особенное?


person Scott    schedule 12.01.2012    source источник
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