IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Importation de plusieurs fichiers txt dans un data


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Importation de plusieurs fichiers txt dans un data
    J'essaie de vouloir importer plusieurs fichiers au format txt et de les afficher dans un datagridview en C #, je n'arrive qu'à importer un seul fichier au lieu de plusieurs fichiers. voici mon code: j'ai deux classes pour connaître form1 et Helper

    le fichier Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
     
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            DataTable table = new DataTable();
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
     
            }
     
            private void btn_import_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog
                {
                    Title = "Parcourir le fichier",
                    CheckFileExists = true,
                    CheckPathExists = true,
                    DefaultExt = "txt",
                    Filter = "txt files (*.txt)|*.txt",
                    FilterIndex = 2,
                    RestoreDirectory = true,
                    ReadOnlyChecked=true,ShowReadOnly=true,
                };
     
                if (openFileDialog1.ShowDialog()==DialogResult.OK)
                {
                    foreach (string file in openFileDialog1.FileNames)
                    {
                        textBox1.Text = openFileDialog1.FileName;
                        Helper.file = textBox1.Text;
                    }
     
                    dataGridView1.DataSource = Helper.DataTableFromTextFile(textBox1.Text);
                }
            }
     
            private void label1_Click(object sender, EventArgs e)
            {
     
            }
        }
    }
    voici le fichier Helper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.IO;
     
    namespace WindowsFormsApp1
    {
        class Helper
        {
            public static string file;
            public static DataTable DataTableFromTextFile(string location,char delimiter='\t')
            {
                DataTable result;
                location = file;
                string[] linearay = File.ReadAllLines(location);
     
                result = FromDataTable(linearay, delimiter);
                return result;
            }
     
            private static DataTable FromDataTable(string[] linearay, char delimiter)
            {
                DataTable dt = new DataTable();
                AddCoulumnToTable(linearay, delimiter,ref dt);
                AddRowToTable(linearay, delimiter, ref dt);
                return dt;
            }
     
            private static void AddRowToTable(string[] Values, char delimiter, ref DataTable dt)
            {
                for (int i = 0; i < Values.Length; i++)
                {
                    string[] valeurs = Values[i].Split(delimiter);
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < valeurs.Length; j++)
                    {
                        dr[j] = valeurs[j];
                    }
                    dt.Rows.Add(dr);
                }
            }
     
            private static void AddCoulumnToTable(string[] columnCollectioi, char delimiter, ref DataTable dt)
            {
                string[] colones = columnCollectioi[0].Split(delimiter);
                foreach (string columnName  in colones)
                {
                    DataColumn dc = new DataColumn();
                    dt.Columns.Add(dc);
                }
            }
        }
    }

    voici les images de différents fichiers txt
    Nom : EcTPf.png
Affichages : 119
Taille : 35,6 Ko
    Nom : IXWys.png
Affichages : 133
Taille : 35,7 Ko
    Nom : jA7gU.png
Affichages : 127
Taille : 35,7 Ko

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Ligne 46, tu affecte openFileDialog1.FileName à textBox1.Text au lieu de la variable locale "file", ce qui fait que c'est toujours le même fichier qui est mis dedans.
    Mais cela ne changera pas grand chose car tu ne construit ton DataTable que sur le contenu du fichier renseigné dans textbox1.Text, donc sur un seul fichier.

    Dans ton Helper, il ne faut pas passer un unique fichier mais la liste complète.
    Ce qui implique :
    - Enlever le foreach de ta procédure actuelle et passer l'IEnumerable contenant la liste des fichier à la méthode Helper.DataTableFromTextFile
    - Boucler dans Helper.DataTableFromTextFile sur chaque fichier
    - Passer dans AddCoulumnToTable(linearay, delimiter,ref dt) uniquement la première fois.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Salut popo,
    Tu peux me faire le code histoire de mieux comprendre

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par Evaka Voir le message
    Salut popo,
    Tu peux me faire le code histoire de mieux comprendre
    Non.
    Mon rôle est de te donner des pistes pour que tu puisses corriger par toi même.
    Si je te fourni un code tout prêt, tu vas le copier et passer à autre chose.
    Ou peut-être que tu vas essayer de le comprendre mais je ne peux pas en avoir l'assurance.

    L'objectif est que tu fasses par toi même la démarche intellectuelle nécessaire pour transformer ces pistes en code.
    Je peux donner plus de détail mais je n'écrirai pas une ligne de code, cela ne te rendrais pas service.
    Donne un poisson un quelqu'un, il mangera une fois. Apprend lui à pécher, il mangera tous les jours.

    1 : Enlever le foreach de ta procédure actuelle et passer l'IEnumerable contenant la liste des fichier à la méthode Helper.DataTableFromTextFile
    Il n'y a pas 36 foreach dans le code que tu as posté, il y en a 2.
    Et un seul est lié à la liste des fichiers, celui de ta méthode btn_import_Click
    Pour passer la liste des fichier à la méthode Helper.DataTableFromTextFile, il faut que cette méthode demande l'Enumerable que renvoie openFileDialog1.FileNames.

    2 : Boucler dans Helper.DataTableFromTextFile sur chaque fichier
    Boucler à partir de l'enumerable passé en paramètre (point 1) pour faire autant de fois que nécessaire le code déjà présent.
    Sauf que si tu te contentes de faire ça, tu va créer autant de DataTable que de fichier.
    Il faut donc remonter la création de ton DataTable dans DataTableFromTextFile et le faire avant de passer dans la boucle.

    3 : Passer dans AddCoulumnToTable(linearay, delimiter,ref dt) uniquement la première fois
    Cette procédure sert à définir les colonnes de ton DataTable.
    Si tu l'appelle plusieurs fois tu vas soit planter soit doubler le nombre de colonnes puisque tes colonnes seront déjà présentes.
    Il faut donc l'appeler une et une seule fois.
    Et tu ne connais les colonnes que si tu as au moins un fichier.
    Ce qui implique qu'il faut le faire dans la boucle sur l'enumerable passé en paramètre (Point 1) lorsque tu traite le premier fichier.
    Ce qui implique de remonter l'appel à AddCoulumnToTable dans cette boucle et de le faire uniquement si la variable qui sert de compteur (boucle for) est à 0.

  5. #5
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    As-tu prévu de gérer le cas où deux fichiers lus n'ont pas le même format ?

Discussions similaires

  1. Macro pour importer plusieurs fichiers .txt dans différents onglets
    Par Hottois dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/03/2017, 23h05
  2. import de plusieurs fichiers XML dans Access 2003
    Par frdek dans le forum Access
    Réponses: 7
    Dernier message: 09/08/2008, 19h39
  3. Importation d'un fichier .txt dans plusieurs tables ?
    Par benooiit dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 23/07/2007, 08h14
  4. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  5. Réponses: 28
    Dernier message: 22/05/2006, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo