Запись CSV-файла в .net

У меня есть требование экспортировать dataset в виде файла CSV.

Я потратил некоторое время на поиск набора правил и понял, что существует множество правил и исключений при написании файла CSV.

http://knab.ws/blog/index.php?/archives/3-CSV-file-parser-and-writer-in-C-Part-1.html http://bytes.com/topic/c- sharp / answers / 236875-problems-streamwriter-output-csv http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/0073fcbb-adab-40f0-b768-4bba803d3ccd

Итак, теперь это не простой процесс разделения строк запятыми, я искал существующего CSV-писателя либо стороннего, либо (надеюсь,!), Включенных в структуру .net.

Изменить: Новая ссылка: http://www.thinqlinq.com/Post.aspx/Title/LINQ-to-CSV-using-DynamicObject-and-TextFieldParser

TextFieldParser – это объект VB (на который можно ссылаться с C #), который автоматически анализирует файлы CSV. 🙂

Мне было интересно, если кто-нибудь знает какие-нибудь удобные .Net (2.0 -> 3.5 и 4.0) библиотеки, которые могут быть использованы для создания правильно отформатированного CSV-файла.

Кроме того, если есть какие-либо наборы правил для генерации CSV-файлов.

Есть много деталей CSV-читателей и parsing CSV-файлов, однако не столько их написано (хорошо, я знаю, что это просто противоположность: P).

http://www.codeproject.com/KB/database/CsvReader.aspx

Любая помощь приветствуется 🙂

Я нашел еще одну статью с более подробными правилами CSV: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm

Оптимальная сторонняя библиотека – Linq-to-CSV (а не фрейм-библиотека): http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

Спасибо за вашу помощь всем. Я решил, что лучшим решением будет создание простого статического classа, который будет выполнять специальную замену персонажа (что упоминал Крис).

Если бы у меня была потребность в Linq, запрашивающем мои CSV-файлы, я бы посмотрел на реализацию CodeProjects Linq-to-CSV.

Еще раз спасибо 🙂

Если в вашей ячейке есть какие-либо запятые, окружите всю ячейку двойными кавычками, например:

cell 1,cell 2,"This is one cell, even with a comma",cell4,etc 

И если вам нужна буквальная двойная цитата, сделайте два из них, например:

 cell 1,cell 2,"This is my cell and it has ""quotes"" in it",cell 4,etc 

Что касается дат, придерживайтесь формата ISO, и вы должны быть в порядке (например, yyyy-mm-dd hh: mm: ss)

CsvHelper (библиотека, которую я поддерживаю) также доступна через NuGet.

CsvHelper может автоматически записывать объекты classа в файл для вас.

 var myObj = new MyCustomClass { Prop1 = "one", Prop2 = 2 }; var streamWriter = // Create a writer to somewhere... var csvWriter = new CsvWriter( streamWriter ); // You can write a single record. csvWriter.WriteRecord( myObj ); // You can also write a collection of records. var myRecords = new List{ myObj }; csvWriter.WriteRecords( myRecords ); 

Я просто хотел бы добавить, что есть RFC, который определяет формат CSV, который я бы рассматривал как канонический источник.

Я широко использовал файловые серверы, и для создания CSV- дисков это довольно просто.

Вот функция, которую вы можете использовать для создания строки CSV-файла из списка строк (может также использоваться IEnumerable (Of String) или строковый массив):

 Function CreateCSVRow(strArray As List(Of String)) As String Dim csvCols As New List(Of String) Dim csvValue As String Dim needQuotes As Boolean For i As Integer = 0 To strArray.Count() - 1 csvValue = strArray(i) needQuotes = (csvValue.IndexOf(",", StringComparison.InvariantCulture) >= 0 _ OrElse csvValue.IndexOf("""", StringComparison.InvariantCulture) >= 0 _ OrElse csvValue.IndexOf(vbCrLf, StringComparison.InvariantCulture) >= 0) csvValue = csvValue.Replace("""", """""") csvCols.Add(If(needQuotes, """" & csvValue & """", csvValue)) Next Return String.Join(",", csvCols.ToArray()) End Function 

Как я думаю, конвертировать с VB.NET в C # не составит труда)

Спецификации см. На странице http://en.wikipedia.org/wiki/Comma-separated_values.

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

Возможно, в вашем конкретном случае писать экспортера не так уж сложно, но приятная вещь об этой библиотеке заключается в том, что она двунаправленная. Если вам приходится потреблять CSV по дороге, это не намного лишний код, и / или он дает вам согласованную библиотеку для использования в будущих проектах.

Вы можете использовать ODBC для чтения и записи CSV-файлов (через OdbcConnection и подходящую строку соединения). Это должно быть разумно полезно для создания CSV-файлов и будет обрабатывать такие вещи, как цитирование для вас; однако я столкнулся с некоторыми проблемами при его использовании для чтения CSV-файлов, созданных другими программами.

Другое правило для добавления к другим: используйте запятые как разделители полей, а не как полевые терминаторы. Причина этого в том, что конечная запятая в конце строки может быть неоднозначной: не имеет ли значение или означает ли она значение NULL после нее?

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

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

Более внимательно, эта реализация по существу использует только основные правила:

специальные символы = \ n \ “и разделитель char.

если найдены специальные символы, а затем окружать кавычками. Замените цитату двойной кавычкой.

По сути, это было сказано Крисом. Я думаю, что самый простой способ сделать это – создать мой вспомогательный метод на основе простых правил и пересмотреть на основе потребностей пользователей.

Можете ли вы использовать строковый массив, а затем объединить, используя:

 string out = ""; string[] elements = { "1", "2" }; foreach(string s in elements) { out += s + "," }; out = out.substring(0, out.Length-1); 
  • Тип ответа в виде CSV
  • Как разобрать CSV-файл в приложении Android?
  • Как я могу исправить ошибку загрузки MySQL
  • Как я могу прочитать большой файл CSV с classом Scala Stream?
  • Добавить пробел после n-й запятой в Excel, Notepad ++ или emEditor?
  • В чем разница между CSV (MS-Dos), CSV (Macintosh), CSV (с разделителями-запятыми)
  • CSV на лист Excel снова
  • Java: файл CSV Easy Read / Write
  • Regex для разделения CSV
  • RStudio не выбирает кодировку, которую я говорю ей при чтении файла
  • Как читать файл csv в R, где некоторые значения содержат символ процента (%)
  • Давайте будем гением компьютера.