C# CSV中的行和列出现问题
我在将值写入新的CSV文件时遇到了一个大问题 我收到一个csv文件,从中解析所有值。这很好用,我把它放到了datagridview中 我们要对这个文件做的第一件事是重新排列它。目前,有两组标题:一组位于顶部,另一组位于左侧。基本上,我们需要的是另一种方式:将左侧的头放在顶部,将顶部的头放在文件的下方 不过,现在发生的是,下面的代码生成了一个CSV,其中有一行(正确的)列数正确(而不是行,同样正确)。。。但是,表中的所有值都是“1、1、1、1、1、1、1、1、1、1”等 例如: 我得到的文件是这样的: 文件:,1,2,3,4,5 a类,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% 以下是我目前掌握的代码:C# CSV中的行和列出现问题,c#,csv,rows,C#,Csv,Rows,我在将值写入新的CSV文件时遇到了一个大问题 我收到一个csv文件,从中解析所有值。这很好用,我把它放到了datagridview中 我们要对这个文件做的第一件事是重新排列它。目前,有两组标题:一组位于顶部,另一组位于左侧。基本上,我们需要的是另一种方式:将左侧的头放在顶部,将顶部的头放在文件的下方 不过,现在发生的是,下面的代码生成了一个CSV,其中有一行(正确的)列数正确(而不是行,同样正确)。。。但是,表中的所有值都是“1、1、1、1、1、1、1、1、1、1”等 例如: 我得到的文件是这样
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;
有什么帮助吗
谢谢 更改了文件以便
“字符串writeVal=…”
现在是
对象writeVal=dr[0] 更改了文件以便
“字符串writeVal=…”
现在是
对象writeVal=dr[0] 我相信您正在寻找数据转换。用于数据表的快速转置 我相信您正在寻找数据转换。用于数据表的快速转置 请参阅迭代器,您只迭代行,而不是列。nvm,明白了,谢谢!你能给我一个简短的评论,这样我就可以换成问题回答了吗?将行“string writeVal=…”更改为object writeVal=dr[0];有没有什么特别的原因可以让您使用成熟的ADO.NET模型来实现这一点?只需要一些基本的字符串处理就容易多了。请参阅迭代器,您只迭代行,而不是列。nvm,明白了,谢谢!你能给我一个简短的评论,这样我就可以换成问题回答了吗?将行“string writeVal=…”更改为object writeVal=dr[0];有没有什么特别的原因可以让您使用成熟的ADO.NET模型来实现这一点?只需要一些基本的字符串处理就可以轻松得多。