Изменить символ FileHelpers EOL - PullRequest
2 голосов
/ 12 января 2012

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

1 Ответ

0 голосов
/ 13 января 2012

No 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.

...