Разобрать CSV в .NET - PullRequest
       59

Разобрать CSV в .NET

24 голосов
/ 10 апреля 2009

У меня есть текстовый файл в формате через запятую, разделенный " в большинстве полей. Я пытаюсь передать это во что-то, через что я могу перечислить (например, Generic Collection). У меня нет контроля ни над тем, как выводится файл, ни над символом, который он использует для разделителя.

В этом случае поля разделяются запятой, а текстовые поля заключаются в отметки ". Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых полях есть кавычки (т. Е. 8 " Tray), и они случайно выбираются в качестве следующего поля. В случае числовых полей у них нет кавычек вокруг них, но они начинаются со знака + или - (обозначая положительное / отрицательное число).

Я думал о RegEx, но мои навыки не так уж и хороши, так что, надеюсь, кто-то может предложить некоторые идеи, которые я смогу попробовать. В этом файле содержится около 19 000 записей, поэтому я стараюсь сделать это максимально эффективно. Вот пара примеров строк данных:

"00","000000112260   ","Pie Pumpkin                             ","RET","6.99 ","     ","ea ",+0000000006.99000
"00","000000304078   ","Pie Apple caramel                       ","RET","9.99 ","     ","ea ",+0000000009.99000
"00","StringValue here","8" Tray of Food                             ","RET","6.99 ","     ","ea ",-00000000005.3200

Есть еще много полей, но вы можете получить изображение ....

Я использую VB.NET, и у меня есть общие настройки List для приема данных. Я попытался использовать CSVReader , и, кажется, он работает хорошо, пока вы не нажмете на запись, подобную 3-й (с цитатой в текстовом поле). Если бы я мог как-то заставить его обрабатывать дополнительные кавычки, тогда опция CSVReader будет работать отлично.

Спасибо!

Ответы [ 12 ]

0 голосов
/ 10 апреля 2009

Ваша проблема с CSVReader заключается в том, что в кавычку в третьей записи не добавляется другая кавычка (она же двойная кавычка). Если вы не избежите их, то как бы вы ожидали обработать ", в середине текстового поля?

http://en.wikipedia.org/wiki/Comma-separated_values

(мне пришлось работать с файлами (с разными разделителями), но символы кавычек внутри текстового значения не были экранированы, и я закончил тем, что написал свой собственный синтаксический анализатор. Я не знаю, было ли это абсолютно необходимым или нет.)

0 голосов
/ 10 апреля 2009

Есть как минимум драйверы ODBC для файлов CSV. Но есть разные вкусы CSV.

Что произвело эти файлы? Не исключено, что есть соответствующий драйвер, основанный на требованиях исходного приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...