У меня серьезная проблема с записью значений в новый файл 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;
Любая помощь?
Спасибо!