Высокопроизводительный CSV парсер

Бюджет: 8 000 руб
97.12 $ – 84.05 €
Необходимо написать быстрый парсер CSV данных с минимальным потреблением памяти.

Парсер должен принимать на вход string или Stream с указанием кодировки. Парсер должен оптимально работать с памятью на основе данного подхода stackoverflow.com/a/13342... Замечания к коду по ссылке (применительно только к разделению строчек, для разделения на колонки подход описывается в след абзаце):

1) Сделать его в linq стиле с отложенным чтением строчки за строчкой (основной упор минимальное потребление памяти)
2) splitChar сделать ввиде строки с поддержкой разделения не только одним символом
3) сделать опцию убирать или не убирать пустые элементы (в коде сейчас всегда убирается)

Парсер должен преобразовывать самостоятельно строки в типы данных (string, byte, bool, int, long, decimal, DateTime, TimeSpan, DateTimeOffset и enum). Для 
того используется подход, когда вызывающий код заранее знает о структуре данных, вызывая нужные методы:

CsvParser
{
int ReadInt();
long ReadBool(); // True, False
DateTime ReadDateTime(string format);
T ReadEnum<T>();

bool MoveNext();

CsvParser(string rowSeparator, string columnSeparator);
}

Код методов чтения должен быть реализован так, что он читает посимвольно и напрямую преобразовывает char в нужные типы. Например быстрое преобразование строки в int cc.davelozinski.com/c-sha... Аналогичный подход и с другими типами.

Изменение структуры класса допускается и обсуждается, если для увеличения производительности необходимо будет перед чтением зарегистрировать допустимые данные.

Как результат нужен парсер + юнит тесты (прямая проверка, обработка ошибок, нагрузка).
Опубликован 19.10.2015 в 12:52

Выберите способ верификации:

Обновите страницу после прохождения верификации.