2009-12-02 4 views
3

Мне нужно экспортировать общий список в CSV. Очевидно, я мог бы написать свое, но хотел бы избежать этого!Экспорт в CSV - C#

Я могу найти Google и найти много парсеров CSV, но не так много писателей. Я загрузил FileHelpers, но он не справляется с выходом.

Например, если поле равно

,,",,, 

Выходной сигнал просто:

,,",,, 

Для поля. Я бы ожидал:

",,"",,," 

правильный?

Любые предложения, или я должен сделать это сам?

ответ

4

Отметьте RFC 4180. Мне пришлось написать XSL для преобразования XML в CSV, и это позволило очень легко понять, что нужно делать.

http://tools.ietf.org/rfc/rfc4180.txt

+0

Спасибо за ссылку. Это будет довольно неплохо. – anonymous

+0

Все это хорошо, если предположить, что приложения, генерирующие и потребляющие CSV, соответствуют точно так же RFC 4180. В реальном мире CSV очень похож на HTML, так как почти никто не делает это в соответствии со стандартом, и что Microsoft делает продукт, который не производит или не потребляет стандарт. Поскольку так много CSV в мире создаются OLD-версиями Excel, ситуация очень похожа на то, когда IE6 и его сломанная интерпретация HTML/CSS контролируют 98,5% рынка. –

+0

Очень верно, Мэтт, но я бы утверждал, что если приложение полностью соответствует RFC, или нет, и если вы собираетесь создать свой собственный инструмент, как это делает OP, вы должны стремиться к совершенству и следовать RFC. –

3

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

+0

Yah ... читать о нюансах прямо сейчас. Если это просто запятые, кавычки и новые строки, это может быть достаточно просто. Я надеялся, что FileHelpers можно использовать как для чтения, так и для записи - он будет гарантировать, что любой написанный файл может быть прочитан правильно, но это, похоже, не так. – anonymous

4

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

+0

Если я не понимаю RFC («Если поля не заключены в двойные кавычки, тогда двойные кавычки могут не отображаться внутри полей.»), это неверно в одном случае: [FieldQuoted ('"', QuoteMode.OptionalForBoth)], с полем 'abc" 123' выводит 'abc' 123 ', но он будет улавливать запятые, поэтому поле' abc, 123 ' будет выводить «abc, 123». Тем не менее, я могу просто сделать QuoteMode не факультативным и перестать быть педантичным?:) – anonymous

+0

FileHelpers может охватывать случаи вне RFC, как этот, так как будут случаи CSV-файлов, созданных разработчиками, которые никогда не читали RFC. Вы этого не сделали. ;-) –

+0

Ненавижу три хорошие ответы! – anonymous

0

Я действительно рекомендую CsvHelper от Josh Close для чтения и записи формата csv. CsvHelper будет обрабатывать наиболее распространенные варианты использования, включая экранирование строк со специальными символами.

Вы можете использовать простые методы для чтения и записи (списка) объектов или вручную читать/писать любое поле, которое вы хотите.