Один из наших поставщиков отправляет файлы CSV с недопустимым escape-символом (используя \" внутри другого правильно экранированное строковое поле). Sep не справляется с этим корректно, поставщик еще не исправляет свой процесс, поэтому третий вариант, который я вижу, — попытаться исправить эти данные во время приема. API для Sep может читать из Stream, TextReader, byte[] или напрямую взять имя файла и выполнить его собственное чтение.
Как правильно реализовать фильтр, аналогичный эта подпись? (Я знаю, что это вообще недопустимый C#). Идея состоит в том, что этот фильтр будет находиться между необработанным, потенциально поврежденным файлом на диске и перегрузкой TextReader, из которой Sep может читать. У меня есть идеи. как неэффективно реализовать это, но все, что я делаю с анализом строк, немедленно снижает производительность приложения.
Код: Выделить всё
private TextReader FilterData(TextReader raw)
{
return raw.Replace("\\"", "");
}
Минимальное воспроизведение проблемы находится здесь: https://github.com/bryanboettcher/SepCrash, но я не пытаюсь сосредоточиться на сентябре. p>
Сами данные воспроизводятся в репозитории из массового файла данных fakenamegenerator. Строка 3 — это критическая строка, которая очень точно отражает наши фактические данные.
Код: Выделить всё
Number,Gender,NameSet,Title,GivenName,MiddleInitial,Surname,StreetAddress,City,State,StateFull,ZipCode
1,female,American,Ms.,Danette,J,Bradham,"1385 Foley Street","Fort Lauderdale",FL,Florida,33308
2,female,American,Mrs.,Karla,F,Gandy,"2184 Irish Lane","La Crosse",WI,Wisconsin,54601
3,male,American,Mr.,Kevin,V,Jenkins,"1365\" Rosemont Avenue","Los Angeles",CA,California,90031
4,female,American,Ms.,Vickie,N,Howard,"3847 Java Lane",Columbia,SC,"South Carolina",29201
5,female,American,Ms.,Bonnie,S,Winship,"3389 Shadowmar Drive","New Orleans",LA,Louisiana,70118
Подробнее здесь: https://stackoverflow.com/questions/787 ... textwriter