Разделение строки на запятые, когда данные могут содержать запятые - PullRequest
5 голосов
/ 18 января 2011

У меня есть файл CSV (который я не проектировал, и я не могу изменить сейчас, и я никогда не смогу его изменить), который содержит строки, подобные следующим:

"Surname, Firstname", yes, no, somestring, whatever, etc

Как вы можете видеть здесь, первая , - это не запятая, по которой я хочу разбить строку. Обратите внимание, что эта конкретная запятая заключена в кавычки.

Из-за этого простой string.split(','), очевидно, не будет работать, так как он даст мне массив длины 7 для вышеуказанной строки вместо 6.

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

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

Ответы [ 3 ]

5 голосов
/ 18 января 2011

Вы можете легко справиться с этим, используя класс TextFieldParser . Просто установите HasFieldsEnclosedInQuotes в true.

2 голосов
/ 18 января 2011

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

Пространство имен VisualBasic имеет хорошую библиотекуэто может помочь - TextFieldParser.

1 голос
/ 18 января 2011

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

В конце концов, Split делает посимвольное сравнение, так почему же это менее уродливо, когда вы вызываете существующий код, который не совсем делает то, что вы хотите?Оцените, мой подход был написать свой собственный код.И я разместил код онлайн на http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c.

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