Я должен читать из CSV/файла с разделением табуляцией и записать в такой файл также от .NET.
Трудность состоит в том, что я не знаю структуру каждого файла и потребности записать cvs/tab файл в таблицу данных, которую библиотека FileHelpers, кажется, не поддерживает.
Я уже записал это для Excel с помощью OLEDB, но не могу действительно видеть способ записать файл вкладки для этого, так вернется в библиотеку.
Кто-либо может помочь с предложениями?
Я использовал этот CsvReader , он действительно отличный и хорошо настраиваемый. Он хорошо себя ведет со всеми видами экранирования строк и разделителей. Экранирование в других быстрых и грязных реализациях было плохим, но эта библиотека действительно хороша для чтения. С помощью нескольких дополнительных строк кода вы также можете добавить кеш, если вам нужно.
Написание не поддерживается, но реализовать самостоятельно довольно тривиально. Или вдохновитесь этим кодом .
.NET поставляется с парсером CSV/tab delminited file, называемым классом TextFieldParser.
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx
Он поддерживает полный RFC для CSV-файлов и действительно хорошие отчеты об ошибках.
Вот пара реализаций чтения CSV:
http://www.codeproject.com/KB/database/CsvReader.aspx
http://www.heikniemi.fi/jhlib/ (только одна часть библиотеки; включает также CSV writer)
Я сомневаюсь, что существует стандартный способ конвертировать CSV в DataTable или базу данных "автоматически", вам придется писать код для этого. Как это сделать - отдельный вопрос.
Вы создадите свою таблицу данных в коде, и (предполагая наличие строки заголовка) сможете создать столбцы на основе первой строки в файле. После этого будет просто читать файл и создавать новые строки на основе содержащихся в нем данных.
Вы можете использовать что-то вроде этого:
DataTable Tbl = new DataTable();
using(StreamReader sr = new StreamReader(path))
{
int count = 0;
string headerRow = sr.Read();
string[] headers = headerRow.split("\t") //Or ","
foreach(string h in headers)
{
DataColumn dc = new DataColumn(h);
Tbl.Columns.Add(dc);
count++;
}
while(sr.Peek())
{
string data = sr.Read();
string[] cells = data.Split("\t")
DataRow row = new DataRow();
foreach(string c in cells)
{
row.Columns.Add(c);
}
Tbl.Rows.Add(row);
}
}
Приведенный выше код не компилировался, поэтому в нем могут быть ошибки, но он должен вывести вас на правильный путь.