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%

Type

d, 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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top