У меня возникла большая проблема с записью значений в новый CSV-файл.Проблема с строками и столбцами из CSV
Получаю файл csv, из которого я разбираю все значения. Это прекрасно работает, я привел это и поставил его в datagridview.
Первое, что мы хотим сделать с этим файлом, - это переустановить его. Как бы то ни было, есть два набора заголовков: один сверху, один слева. В принципе, мы хотим, чтобы это было наоборот: поместите заголовки слева на верх, а заголовки сверху, чтобы проложить путь к файлу.
Что происходит, однако, заключается в том, что следующий код создает CSV, который имеет одну строку (которая правильная) с правильным количеством столбцов (вместо строк, снова правильная) ... однако все значения для таблица являются "1, 1, 1, 1, 1, 1, 1, 1, 1, 1" и т.д.
EG:
Я получить файл, как так:
файл :, 1, 2, 3, 4, 5
тип a, 9%, 10%, 11%, 12%, 13%
типа B, 9%, 10%, 11%, 12%, 13%
типа с, 9%, 10%, 11%, 12%, 13%
типа д, 9% , 10%, 11%, 12%, 13%
хочу сделать его следующим образом:
Файл :, типа а, тип B, тип C, тип д
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;
Любая помощь?
Спасибо!
Смотрите итератор, вы повторяете только строки, а не столбцы. – Saar
Где я это ищу? –
nvm, получил это спасибо! Не могли бы вы сделать быстрый комментарий, чтобы я мог ответить на вопрос?Изменена линия «string writeVal = ...» до объект writeVal = dr [0]; –