Каков эффективный способ удаления данных из потока (или TextWriter)?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каков эффективный способ удаления данных из потока (или TextWriter)?

Сообщение Anonymous »

Мы используем Sep для обработки файлов CSV перед массовым импортом в базу данных. Процесс быстрый, но Sep жертвует некоторым исправлением ошибок ради чистой скорости.
Один из наших поставщиков отправляет файлы CSV с недопустимым escape-символом (используя \" внутри другого правильно экранированное строковое поле). Sep не справляется с этим корректно, поставщик еще не исправляет свой процесс, поэтому третий вариант, который я вижу, — попытаться исправить эти данные во время приема. API для Sep может читать из Stream, TextReader, byte[] или напрямую взять имя файла и выполнить его собственное чтение.
Как правильно реализовать фильтр, аналогичный эта подпись? (Я знаю, что это вообще недопустимый C#). Идея состоит в том, что этот фильтр будет находиться между необработанным, потенциально поврежденным файлом на диске и перегрузкой TextReader, из которой Sep может читать. У меня есть идеи. как неэффективно реализовать это, но все, что я делаю с анализом строк, немедленно снижает производительность приложения.

Код: Выделить всё

private TextReader FilterData(TextReader raw)
{
return raw.Replace("\\"", "");
}
Минимальное воспроизведение проблемы находится здесь: https://github.com/bryanboettcher/SepCrash, но я не пытаюсь сосредоточиться на сентябре. Сент ведет себя правильно.
Минимальное воспроизведение проблемы находится здесь: 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
Строка 3, адрес: «1365\" Rosemont Avenue". Для правильного форматирования CSV это должно быть "1365\"" Rosemont Avenue". Мы может обработать ошибочную косую черту в коде приложения, но только после того, как она будет проанализирована библиотекой. Нарушающее поле на самом деле является адресом и будет очищено на этапе проверки адреса позже. Для этой цели либо «1365 Rosemont Avenue. " или "1365\""Роузмонт Авеню" подойдет.

Подробнее здесь: https://stackoverflow.com/questions/787 ... textwriter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»