С# - запись в таблицу данных из строки с разделителями

У меня есть примерно такая строка:

"X","Y","Z"
"X2","Y2","Z2"

т. е. несколько строк, разделенных новой строкой, содержащей несколько разных строковых значений, разделенных запятыми.

Как я могу создать функцию для ввода этих значений в таблицу данных следующим образом:

"X" "Y" "Z"
"X2" "Y2" "Z2"

для любого количества строк и столбцов в моей строке?

Вот что у меня есть до сих пор:

public static DataTable writeToDT(string data) //Write to datatable from string
    {
        DataTable dataTable = new DataTable();
        foreach (string header in csvHeader)
        {
            dataTable.Columns.Add(header);
        }
        using (StringReader reader = new StringReader(data))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                DataRow dataRow = dataTable.NewRow();
            }
        }
        return dataTable;
    }

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

Заранее спасибо.


person ToppuKekku    schedule 31.01.2015    source источник
comment
msdn.microsoft.com /en-us/library/vstudio/   -  person Ňɏssa Pøngjǣrdenlarp    schedule 31.01.2015


Ответы (1)


Что-то вроде этого должно работать. Разбор CSV — это решаемая проблема, класс TextFieldParser в пространстве имен using Microsoft.VisualBasic.FileIO; (добавьте ссылку на Microsoft.VisualBasic) может сделать это за вас.

public static DataTable WriteToDataTable(string data)
{
    DataTable dataTable = new DataTable();
    foreach (var header in csvHeader)
        dataTable.Columns.Add(header);

    using (var reader = new StringReader(data))
    {
        TextFieldParser csvParser = new TextFieldParser(reader) { HasFieldsEnclosedInQuotes = true, Delimiters = new string[] { "," } };

        while (!csvParser.EndOfData)
        {
            var dataTableRow = dataTable.NewRow();
            dataTableRow.ItemArray = csvParser.ReadFields();
            dataTable.Rows.Add(dataTableRow);
        }
    }
    return dataTable;
}
person steve16351    schedule 31.01.2015
comment
Отлично, спасибо! Если у кого-то еще есть эта проблема, обратите внимание, что мне пришлось включить Microsoft.VisualBasic.FileIO в PROJECT › Add Reference › Assemblies › Framework. - person ToppuKekku; 31.01.2015