Problème avec des lignes et des colonnes d'un fichier CSV
Question
Je vais avoir un problème majeur avec les valeurs d'écriture dans un nouveau fichier CSV.
Je reçois un fichier csv dont je parse toutes les valeurs. Cela fonctionne très bien, je l'ai soulevé cette question et de le mettre dans un datagridview.
La première chose que nous voulons faire avec ce fichier est de re-arranger. En l'état actuel, il y a deux ensembles de têtes: l'une sur le dessus, et un le long de la gauche. Au fond, nous voulons l'inverse:. Mettre les têtes à gauche sur le dessus, et les en-têtes sur le dessus pour travailler leur chemin vers le fichier
Qu'est-ce qui se passe maintenant, cependant, est que le code suivant fait un fichier CSV qui a une ligne (ce qui est à droite) avec la bonne quantité de colonnes (au lieu de lignes, encore une fois correct) ... mais toutes les valeurs de la Table sont "1, 1, 1, 1, 1, 1, 1, 1, 1, 1" etc.
EG:
Je reçois le fichier comme ceci:
Fichier :, 1, 2, 3, 4, 5
type a, 9%, 10%, 11%, 12%, 13%
de type b, 9%, 10%, 11%, 12%, 13%
type C, 9%, 10%, 11%, 12%, 13%
Typed, 9%, 10%, 11%, 12%, 13%
Je veux faire comme ceci:
Fichier :, type A, type B, type C, de type 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%
Voici le code que j'ai à ce jour:
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;
Toute aide?
Merci!
La solution
Changement de fichier afin "String writeVal = ..."
est maintenant
objet writeVal = dr [0];
Autres conseils
Je crois que vous cherchez-transposition de données. Voir cette pour transposition rapide d'un datatable.