.net Текстовые библиотеки с разделителями? - PullRequest
2 голосов
/ 19 марта 2009

Есть ли в .net framework какие-либо встроенные сборки для обработки чтения и записи из и в текстовые файлы с разделителями? Или это то, что я создал сам?

Ответы [ 5 ]

3 голосов
/ 19 марта 2009

На самом деле в Microsoft.VisualBasic.dll есть класс TextFieldParser , который может читать файлы CSV и тому подобное. Я никогда не пробовал это все же.

3 голосов
/ 19 марта 2009

FileHelpers - это тот, кто предположительно хорош в этом.

1 голос
/ 19 марта 2009

В .NET для c # нет встроенных считывателей CSV, однако доступны сторонние библиотеки.

  • FileHelpers подходит для вещей типа ORM, но не подходит для произвольных форматов столбцов, например, с чем может справиться Excel.
  • CsvReader в CodeProject неплох, но в нем отсутствуют некоторые функции, такие как обработка полей фиксированной длины и использование строк в качестве разделителей.
  • Библиотека Calcite-Csv в Google Code. Это мое собственное усилие, которое вам может пригодиться.
1 голос
/ 19 марта 2009

Нет, это не так. Вам придется написать один самостоятельно ... или вы можете просто использовать что-то, что уже сделал кто-то другой. Просто Google. NET CSV писатель. Вот пример из кода Google: csv-reader-and-writer

РЕДАКТИРОВАТЬ: я использовал следующий, и он работал хорошо: (из knab.ws

public class CsvWriter
{
        public static string WriteToString(DataTable table, bool header, bool quoteall)
        {
                StringWriter writer = new StringWriter();
                WriteToStream(writer, table, header, quoteall);
                return writer.ToString();
        }

        public static void WriteToStream(TextWriter stream, DataTable table, bool header, bool quoteall)
        {
                if (header)
                {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                                WriteItem(stream, table.Columns[i].Caption, quoteall);
                                if (i < table.Columns.Count - 1)
                                        stream.Write(',');
                                else
                                        stream.Write('\n');
                        }
                }
                foreach (DataRow row in table.Rows)
                {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                                WriteItem(stream, row[i], quoteall);
                                if (i < table.Columns.Count - 1)
                                        stream.Write(',');
                                else
                                        stream.Write('\n');
                        }
                }
        }

        private static void WriteItem(TextWriter stream, object item, bool quoteall)
        {
                if (item == null)
                        return;
                string s = item.ToString();
                if (quoteall || s.IndexOfAny("\",\x0A\x0D".ToCharArray()) > -1)
                        stream.Write("\"" + s.Replace("\"", "\"\"") + "\"");
                else
                        stream.Write(s);
        }
}
0 голосов
/ 19 марта 2009

Я думаю, это то, что вам придется создать самостоятельно.
(Я все равно сделал;)).

...