Import fichier txt multiple dans datagridviexw [Résolu]

Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
23564
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
0
Merci
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
Commenter la réponse de jordane45
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
0
Merci
dsl j'ai fait un vieux copié collé merdique :)
Commenter la réponse de le_pere_noel
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
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?
Whismeril
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
-
Si le nombre de fichiers est variable, y a t-il des bornes connues?
le_pere_noel
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
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
le_pere_noel
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
L'autre possibilité est merge de tous les fichiers en un seul a x colonnes
Whismeril
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
-
Bon ça élimine le binding (à moins que tu te sentes la génération de classe en temps réel).
Je regarde ça.
Commenter la réponse de Whismeril
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
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
            }

le_pere_noel
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
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
Whismeril
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
-
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.
le_pere_noel
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
j'etais effectivement parti pour le chart
Whismeril
Messages postés
12365
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
-
Merci de mettre le sujet résolu si cela te convient
le_pere_noel
Messages postés
17
Date d'inscription
jeudi 23 octobre 2014
Dernière intervention
25 octobre 2014
-
done ;)
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.