DataTable из текстового файла?

Я взял на себя приложение, написанное другим разработчиком, которое считывает данные из базы данных и экспортирует их.

Разработчик использовал DataTables и DataAdaptors.

So,

 _dataAdapter = new SqlDataAdapter("Select * From C....", myConnection);

а потом

ExtractedData = new DataTable("CreditCards");
_dataAdapter.Fill(ExtractedData);

Затем ExtractedData передается для выполнения различных функций.

Теперь мне сказали, что мне нужно, в дополнение к этому, получить тот же формат данных из некоторых текстовых файлов, разделенных запятыми. Приложение выполняет ту же обработку — просто получает данные из двух источников.

Итак, мне интересно, могу ли я прочитать данные в DataTable, как указано выше, а затем ДОБАВИТЬ больше записей из файла CSV.

Это возможно?


person Craig    schedule 21.11.2012    source источник
comment
Как определить общее количество столбцов информации из файла? Пожалуйста, покажите образец данных файла.   -  person Furqan Safdar    schedule 21.11.2012


Ответы (3)


Вам может понадобиться использовать эту функцию для чтения данных в DataTable из файла.

public DataTable GetDataSourceFromFile(string fileName)
{
    DataTable dt = new DataTable("CreditCards");
    string[] columns = null;

    var lines = File.ReadAllLines(fileName);

    // assuming the first row contains the columns information
    if (lines.Count() > 0)
    {
        columns = lines[0].Split(new char[] { ',' });

        foreach (var column in columns)
            dt.Columns.Add(column);
    }

    // reading rest of the data
    for (int i = 1; i < lines.Count(); i++)
    {
        DataRow dr = dt.NewRow();
        string[] values = lines[i].Split(new char[] { ',' });

        for (int j = 0; j < values.Count() && j < columns.Count(); j++)
            dr[j] = values[j];

        dt.Rows.Add(dr);
    }
    return dt;
}
person Furqan Safdar    schedule 21.11.2012
comment
будьте осторожны, когда пишете i или j. я по ошибке написал dr[j] = values[j]; это j в обоих местах, потому что j и i похожи внешне. Спасибо. - person MindRoasterMir; 20.01.2019

Это определенно возможно.
В DataTable есть метод NewRow, поэтому самый простой метод грубой силы, который я вижу, — это читать текстовый файл по одной строке за раз, анализировать строку (split(",") и затем заполнять поля строки. Затем вам нужно добавить новую строку в коллекцию Rows таблицы DataTable.
Могут быть более разумные способы сделать это, но это кажется достаточно простым для реализации (без знания вашей схемы).

person Hamish Smith    schedule 21.11.2012

Хорошо, попробуйте это:

public string[] getColumns(bool ColumnNames)
{
    try {
        StreamReader fileReader = new StreamReader(FileName);
        string line = fileReader.ReadLine;
        fileReader.Close();
        string[] Columns = line.Split(",");
        if (ColumnNames) {
            return Columns;
        }
        int i = 1;
        int c = 0;
        string[] columnsNames = new string[Columns.Count];
        foreach (string column in Columns) {
            columnsNames(c) = "column" + i;
            i += 1;
            c += 1;
        }
        return columnsNames;
    } catch (Exception ex) {
        //log to file    
    }
    return null;
}

А ТАКЖЕ

public DataTable ReturnData(bool ColumnNames)
{
    try {
        DataTable dt = new DataTable();
        foreach ( columnName in getColumns(ColumnNames)) {
            dt.Columns.Add(columnName);
        }
        StreamReader fileReader = new StreamReader(FileName);
        if (ColumnNames) {
            fileReader.ReadLine();
        }
        string line = fileReader.ReadLine;
        while ((line != null)) {
            line = line.Replace(Strings.Chr(34), "");
            dt.Rows.Add(line.Split(","));
            line = fileReader.ReadLine;
        }
        fileReader.Close();
        return dt;
    } catch (Exception ex) {
        //log to file
    }
    return null;
}
person sajanyamaha    schedule 21.11.2012