Проблема со строками и столбцами из CSV - PullRequest
1 голос
/ 18 ноября 2009

У меня серьезная проблема с записью значений в новый файл CSV.

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

Первое, что мы хотим сделать с этим файлом, это перестроить его. В его нынешнем виде есть два набора заголовков: один вдоль вершины, а другой - слева. По сути, мы хотим, чтобы все было наоборот: поместите заголовки слева вверху, а заголовки сверху, чтобы они шли вниз по файлу.

Что теперь происходит, однако, так это то, что следующий код создает CSV с одной строкой (которая является правильной) с правильным количеством столбцов (вместо строк, опять же, с правильным) ... однако все значения для таблицы "1, 1, 1, 1, 1, 1, 1, 1, 1, 1" и т. д.

EG:

Я получаю файл так:

Файл: 1, 2, 3, 4, 5

тип А, 9%, 10%, 11%, 12%, 13%

тип b, 9%, 10%, 11%, 12%, 13%

тип c, 9%, 10%, 11%, 12%, 13%

тип d, 9%, 10%, 11%, 12%, 13%

Я хочу сделать так:

Файл :, введите a, введите b, введите c, введите d

1, 9%, 9%, 9%, 9%

2, 10%, 10%, 10%, 10%

3, 11%, 11%, 11%, 11%

4, 12%, 12%, 12%, 12%

5, 13%, 13%, 13%, 13%

Вот код, который у меня есть:

if (!File.Exists(path))
            return null;

        string full = Path.GetFullPath(path);
        string file = Path.GetFileName(full);
        string dir = Path.GetDirectoryName(full);

        //create the "database" connection string
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;"
          + "Data Source=\"" + dir + "\\\";"
          + "Extended Properties=\"text;HDR=No;FMT=Delimited\"";

        //create the database query
        string query = "SELECT * FROM [" + file + "]";

        //create a DataTable to hold the query results
        DataTable dTable = new DataTable();

        //create an OleDbDataAdapter to execute the query
        OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);

        //Get the CSV file to change position.


        try
        {
            //fill the DataTable
            dAdapter.Fill(dTable);

            string activedir = dir;
            //Now write in new format.
            StreamWriter sw = new StreamWriter(File.Create(dir + "\\modified_" + file.ToString()));
            int iRowCount = dTable.Rows.Count;
            foreach(DataRow dr in dTable.Rows)
            {
                string writeVal = (string)dTable.Columns[0].ToString();
                sw.Write(writeVal);
                sw.Write(",");
            }
            sw.Write(sw.NewLine);

            sw.Close();
            dAdapter.Dispose();

        }
        catch (InvalidOperationException /*e*/)
        { }

        string newPath = dir + "\\modified_" + file.ToString();

        if (!File.Exists(newPath))
            return null;

        string f = Path.GetFullPath(newPath);
        string fi = Path.GetFileName(f);
        string di = Path.GetDirectoryName(f);

        //create the "database" connection string
        string conn = "Provider=Microsoft.Jet.OLEDB.4.0;"
          + "Data Source=\"" + di + "\\\";"
          + "Extended Properties=\"text;HDR=No;FMT=Delimited\"";

        //create the database query
        string q = "SELECT * FROM [" + fi + "]";

        //create a DataTable to hold the query results
        DataTable dTe = new DataTable();

        //create an OleDbDataAdapter to execute the query
        OleDbDataAdapter dA = new OleDbDataAdapter(q, connString);

        //Get the CSV file to change position.


        try
        {
            //fill the DataTable
            dA.Fill(dTe);

        }
        catch (InvalidOperationException /*e*/)
        { }

        return dTe;

Любая помощь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Изменен файл, чтобы "string writeVal = ..."

сейчас

объект writeVal = dr [0];

0 голосов
/ 18 ноября 2009

Я полагаю, вы ищете для переноса данных. См. для быстрого преобразования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...