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 :

comparer 2 fichiers text qui contiennent une liste chacun


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut comparer 2 fichiers text qui contiennent une liste chacun
    bonjour,
    je voudrais avoir votre aide s'il vous plait,
    j'ai 2 fichiers et dans chaque fichier il y a une liste de mots, je voudrai faire un comparaison, je voudrai supprimer les mots qui existent en même temps dans la liste A et la liste B, on va dire que dans une troisième liste on mettra le reste des mots qui ne sont pas supprimer
    merci de votre aide

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    Bonjour,

    Avec LINQ, ça se fait en quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                List<string> listA = new List<string> { "toto", "tata", "tyty", "tete" };
                List<string> listB = new List<string> { "titi", "tutu", "tete", "toto", };
                List<string> listC = new List<string>();
     
                var a = listA.Distinct().Where(s => !listB.Any(t => t == s)).ToList(); // On filtre A avec B
                var b = listB.Distinct().Where(s => !listA.Any(t => t == s)).ToList(); // On filtre B avec l'original de A
     
                listC.AddRange(a); // On rajoute la liste B
                listC.AddRange(b); // On rajoute la liste A
    Suffit de remplacer listA et listB par tes listes à toi.

    (Il y a peut-être un moyen encore plus simple mais là c'est déjà pas trop mal)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    je vais tester et je te donne des news après

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Qu'est-ce-que tu fais des doublons dans l'une des listes qui n'apparaissent pas dans l'autre ? Ex : ["a", "a", "b"] et ["b", "c"] => ["a", "c"] ou ["a", "a", "c"] ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    les doublons , je voudrais les supprimer
    par ex liste A: sucre, sel, poivre ; et liste B curry, poivre, sel ; donc dans liste C : il y aura sucre

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Tu ne m'as pas compris. Je parlais de doublon à l'intérieur même d'une liste ; à moins que ce ne puisse pas être le cas dans ton contexte. Et puis ton propre exemple est faux puisque ta liste C devrait contenir sucre et curry.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    les doublons aussi doivent être supprimé
    oui liste C : sucre et curry

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    j'ai essayé et ça n'a pas marché,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                string[] Liste1 = System.IO.File.ReadAllLines(@"C:\Users\...\liste A.txt");
                string[] Liste2 = System.IO.File.ReadAllLines(@"C:\Users\...\liste B.txt");
                List<string> ListeFinal = new List<string>(); 
     
                var a = Liste1.Distinct().Where(s => !Liste2.Any(t => t == s)).ToList();
                var b = Liste2.Distinct().Where(s => !Liste1.Any(t => t == s)).ToList();
     
                ListeFinal.AddRange(a);
                ListeFinal.AddRange(b);
    un peu d'aide s'il vous plait

  9. #9
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Déjà System.IO.File.ReadAllLines(@"C:\Users\...\liste A.txt"); ça fait un tableau de lignes et pas par mot. Essaye cette méthode et coupe ensuite en tableau de mots.

    string s = System.IO.File.ReadAllText(@"C:\Users\...\liste A.txt");
    Tes fichiers il y a que des espaces comme séparateurs? Si oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string[] stringSplitted = s.Split(' ');
    List<string> list1 = new List<string>().AddRange(stringSplitted);
    Tu fais la même chose pour list2.

    Ce linq devrait passer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<string> listFinale= list2.Except(list1).ToList();

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    Merci je vais essayé, y a pas d'espace comme séparateur mais des points

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    DuyBinh:
    Erreur CS0428 Impossible de convertir le groupe de méthodes 'ToList' en type non-délégué 'List<string>'. Souhaitiez-vous appeler la méthode*?

  12. #12
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Poste tout le code ainsi que tes fichiers .txt

    T'a écrit "ToList()" ou juste "ToList" sans les parenthèses?. ToList() est une méthode donc toujours avec parenthèses.

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    modif premier

    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
     string[] Liste1 = File.ReadAllLines(@"C:\...\listeA.txt");
                string[] Liste2 = File.ReadAllLines(@"C:\...\listeB.txt");
     
                List<string> Liste = new List<string>(); 
     
                var a = Liste1.Distinct().Where(s => !Liste2.Any(t => t == s)).ToList();
                var b = Liste2.Distinct().Where(s => !Liste1.Any(t => t == s)).ToList();
                Liste.AddRange(a);
                Liste.AddRange(b);
                Console.WriteLine(Liste);
                //envoie données dans un fichier text
                using (System.IO.StreamWriter dest =
                        new System.IO.StreamWriter(path: @"C:\...\liste final.txt"))
                {
                    foreach(string Recu in Liste)
                    {
                        string[] lignes = System.IO.File.ReadAllLines(Recu);
                        foreach(string ligne in lignes)
                        {
                            Console.WriteLine(Liste);
                            dest.WriteLine(Liste);
                        }
     
                    }
                }

  14. #14
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Citation Envoyé par Mananjo17 Voir le message
    modif premier

    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
     string[] Liste1 = File.ReadAllLines(@"C:\...\listeA.txt");
                string[] Liste2 = File.ReadAllLines(@"C:\...\listeB.txt");
                
                List<string> Liste = new List<string>(); 
                
                var a = Liste1.Distinct().Where(s => !Liste2.Any(t => t == s)).ToList();
                var b = Liste2.Distinct().Where(s => !Liste1.Any(t => t == s)).ToList();
                Liste.AddRange(a);
                Liste.AddRange(b);
                Console.WriteLine(Liste);
                //envoie données dans un fichier text
                using (System.IO.StreamWriter dest =
                        new System.IO.StreamWriter(path: @"C:\...\liste final.txt"))
                {
                    foreach(string Recu in Liste)
                    {
                        string[] lignes = System.IO.File.ReadAllLines(Recu);
                        foreach(string ligne in lignes)
                        {
                            Console.WriteLine(Liste);
                            dest.WriteLine(Liste);
                        }
                        
                    }
                }
    C'est pas bon là tu compares des listes de lignes et pas de mots!

    Le code que j'ai fait devrait marcher et écrire dans un fichier il y a plus simple que ce code surtout si c'est juste coller la liste finale...

  15. #15
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    avec ToList()

    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
    //source des fichiers à comparer
                string Liste1 = File.ReadAllText(@"C:\...\listeA.txt");
                string Liste2 = File.ReadAllText(@"C:\...\listeB.txt");
     
                string[] split1 = Liste1.Split('.');
                List<string> Liste1 = new List<string>();
                Liste1.AddRange(split1);
                string[] split2 = Liste2.Split(' ');
                List<string> Liste2 = new List<string>();
                Liste2.AddRange(split2);
                List<string> listfinal = Liste2.Except(Liste1).ToList();
     
                //envoie données dans un fichier text
                using (StreamWriter dest =
                        new StreamWriter(path: @"C:\...\liste données.txt"))
                {
                    foreach (string Recu in listfinal)
                    {
                        string[] lignes = File.ReadAllLines(Recu);
                        foreach (string ligne in lignes)
                        {
                            Console.WriteLine(listfinal);
                            dest.WriteLine(listfinal);
                        }
     
                    }
                }

  16. #16
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Citation Envoyé par Mananjo17 Voir le message
    avec ToList()

    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
    //source des fichiers à comparer
                string Liste1 = File.ReadAllText(@"C:\...\listeA.txt");
                string Liste2 = File.ReadAllText(@"C:\...\listeB.txt");
    
                string[] split1 = Liste1.Split('.');
                List<string> Liste1 = new List<string>();
                Liste1.AddRange(split1);
                string[] split2 = Liste2.Split(' ');
                List<string> Liste2 = new List<string>();
                Liste2.AddRange(split2);
                List<string> listfinal = Liste2.Except(Liste1).ToList();
                /*
                var a = Liste1.Distinct().Where(s => !Liste2.Any(t => t == s)).ToList();
                var b = Liste2.Distinct().Where(s => !Liste1.Any(t => t == s)).ToList();
                Liste.AddRange(a);
                Liste.AddRange(b);
                */
                //envoie des traduction superflues dans un fichier text
                using (StreamWriter dest =
                        new StreamWriter(path: @"C:\...\liste données.txt"))
                {
                    foreach (string Recu in listfinal)
                    {
                        string[] lignes = File.ReadAllLines(Recu);
                        foreach (string ligne in lignes)
                        {
                            Console.WriteLine(listfinal);
                            dest.WriteLine(listfinal);
                        }
    
                    }
                }
    T'as split sur la liste 2 avec un espace au lieu d'un point.

  17. #17
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    au fait la liste 2 elle est juste comme ça :
    aze
    qsd
    xcv
    AZEqsd

    y a pas de ponctuation

    1 mot et après à la ligne

    en console j'ai ça
    System.Collections.Generic.List`1[System.String]

  18. #18
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    Pour le fichier 2 c'est donc pas un espace mais un retour à la ligne. Tu peux soit utiliser la méthode ReadAllLines comme t'as fait au début, soit faire un string.Split("\r\n") qui est un retour à la ligne. Evite de mettre des variables en majuscules stp

    A l'arrache ça devrait être un truc du genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string text = File.ReadAllText(@"C:\...\listeA.txt");
    string[] texteArray = File.ReadAllLines(@"C:\...\listeB.txt");
     
    string[] split1 = text.Split('.');
    List<string> liste1 = new List<string>();
    liste1.AddRange(split1);
     
    List<string> liste2 = new List<string>();
    liste2.AddRange(texteArray);
    List<string> listfinal = liste2.Except(liste1).ToList();
     
    File.WriteAllLines(@"C:\...\liste données.txt", listfinal.ToArray(), Encoding.UTF8);

  19. #19
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2020
    Messages : 29
    Par défaut
    hello les amis,
    merci à tous pour votre aide, j'ai pu avoir en résultat une liste qui de clé, je vais voir si je peux l'amélioré pour que ce soit présentable

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Juste pour précision, voici la requête Linq qui permet d'obtenir le résultat attendu, à partir du moment où on a les mots à comparer dans des collection (je voulais attendre que vous ayez fini votre réflexion avant de la poster) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var listA = new[] { "a", "a", "b" };
    var listB = new[] { "b", "c", "d" };
    var result = listA.Union(listB).Except(listA.Intersect(listB)).ToArray(); // result : { "a", "c", "d" }
    À noter que l'union, en cas de doublon, ne conservera qu'un seul exemplaire du doublon.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2017, 16h55
  2. Comment copier un texte qui comprend une liste déroulante
    Par cool2505 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/10/2014, 13h21
  3. pouvoir copier un texte qui contient une liste deroulante
    Par cool2505 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 03/10/2014, 12h23
  4. telecharger un fichier zip qui contient une liste de fichier à supprimer
    Par joulive dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 29/07/2009, 13h54
  5. Réponses: 2
    Dernier message: 17/10/2007, 16h15

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