Import fichier txt multiple dans datagridviexw

Résolu
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014 - Modifié par jordane45 le 23/10/2014 à 17:21
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014 - 24 oct. 2014 à 11:07
Bonjour,

débutant en c# j'essaye de faire un tracé de courbes issues de plusieurs fichiers texte. Afin de faire ça j'essaye de créé un tableau à partir de tous mes fichiers chacun de mes fichiers étant une colonne de mon tableau voici mon code


try
            {
                int r = 1;
                int c = 1;
                string[] txtFiles = Directory.GetFiles(test);
                foreach (string f in txtFiles)
                {
                    StreamReader file = new StreamReader(f);
                    string line = file.ToString();
                    while ((line = file.ReadLine()) != null)
                    {
                        AffichePts.Rows[r].Cells[c].Value = line;
                        c++;
                    }
                    r++;
                 }
            }
            catch (Exception d)
            {
                MessageBox.Show(d.Message);
                Application.Exit();
            }




j'ai une erreur sur la cell active qui semble être x=-1 y=-1 :/


{
                DataTable dt = new DataTable();
                int index = 1;
                string[] txtFiles = Directory.GetFiles(_CalypsoResultPath + "temp/");
                foreach (string f in txtFiles)
                {
                    string colum = "Courbe" + Convert.ToString(index);
                    System.IO.StreamReader file = new System.IO.StreamReader(f);
                    string[] columnnames = file.ReadLine().Split(' ');
                    foreach (string c in columnnames)
                    {
                        dt.Columns.Add(colum);
                    }
                    string newline;
                    while ((newline = file.ReadLine()) != null)
                    {
                        DataRow dr = dt.NewRow();
                        string[] values = newline.Split(' ');
                        for (int i = 0; i < values.Length; i++)
                        {
                            dr[i] = values[i];
                        }
                        dt.Rows.Add(dr);
                    }
                    index++;
                    file.Close();
                }
                AffichePts.DataSource = dt;
            }

le but de mon code étant donc de créer une Row à chaque nouveau fichier. J'avais essayé avec uniquement AffichePts.Rows.add(line); malheureusement il n'incrémente pas les colonnes d'où mon code un peu à la con

Merci d'avance de votre aide

P.S : J'essaye également de faire un merge de X fichiers text pour contourner le problème, j'arrive à merge mais les éléments les uns à la suite des autres alors que je souhaiterai une colonne

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
23 oct. 2014 à 17:21
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
23 oct. 2014 à 17:24
dsl j'ai fait un vieux copié collé merdique :)
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 oct. 2014 à 17:46
Bonsoir, peux tu mettre le format de ton fichier texte?
Tous tes fichiers ont ils le même nombre de ligne?
Le nombre de fichiers est fixe ou variable?
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 oct. 2014 à 17:47
Si le nombre de fichiers est variable, y a t-il des bornes connues?
0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
23 oct. 2014 à 19:11
Bonsoir merci de ton aide.
Le nombre de fichier est aléatoire c'est pour cela que je pars sur un getfile. Le nombre de ligne est lui aussi aléatoire mais commun a chaque fichier au moment ou je les importe.
Je peux éventuellement mettre un END en dernière ligne vu que je retravaille les fichiers avant cette étape
Enfin le format a l'intérieur est tout con, une liste de chiffre decimaux a la suite dans une seule colonne .

Merci encore
0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
23 oct. 2014 à 19:12
L'autre possibilité est merge de tous les fichiers en un seul a x colonnes
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 oct. 2014 à 19:23
Bon ça élimine le binding (à moins que tu te sentes la génération de classe en temps réel).
Je regarde ça.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 oct. 2014 à 22:18
Pour remplir le datagridview
            string path = Application.StartupPath + @"\test";
            string[] txtFiles = Directory.GetFiles(path);//récupère le nom des fichiers dans le répertoire

            List<string[]> fichiers = new List<string[]>(); //parce qu'avec .Add c'est plus simple

            foreach(string chemin in txtFiles)
                fichiers.Add(File.ReadAllLines(chemin));//File.ReadAllLines retourne directement un tableau de string contenant chaque lignes


            for(int i = 0; i<fichiers.Count;i++)//on ajoute autant de colonnes que necessaire
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());

            
            for(int i = 0; i < fichiers[0].Length;i++)//Puisque tous les fichiers ont le même nombre de lignes, je prend la longueur du premier tableau en référence
            {
                DataGridViewRow row = dataGridView1.Rows[dataGridView1.Rows.Add()];//ajoute une ligne 
                for(int j = 0; j<fichiers.Count;j++)
                    row.Cells[j].Value = fichiers[j][i];//remplit les cellules
            }

0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
23 oct. 2014 à 22:20
Merci bcp je test ça demain au taf ;)
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
23 oct. 2014 à 22:23
De rein
0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
24 oct. 2014 à 09:10
je me permet de te re remercier ça marche parfaitement même si à la fin avec 33 fichiers et 60 lignes par fichier c'est assez long niveau traitement je vais essayer de mettre un message d'attente ;).

Reste plus qu'à tracer tout ça
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
24 oct. 2014 à 09:52
Bonjour, pour le graphisme il y a le controle Charts.
Un bon tuto pour commencer
http://plasserre.developpez.com/cours/chart/
c'est en VB.Net mais la transcription en C# se fait bien.

Concernant le temps d'exécutrion ça vient je pense de la saisie du datagridview cellule par cellule, je pense qu'en bindant ça irait plus vite.
Avec un dataset peut etre.
0
le_pere_noel Messages postés 17 Date d'inscription jeudi 23 octobre 2014 Statut Membre Dernière intervention 25 octobre 2014
24 oct. 2014 à 10:13
j'etais effectivement parti pour le chart
0
Rejoignez-nous