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

Entrée/Sortie Java Discussion :

Supprimer les doublons dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 27
    Points
    27
    Par défaut Supprimer les doublons dans un fichier
    Bonjour,

    J'aimerais supprimer les doublons dans un fichier.

    J'ai utilisé une méthode et celle-ci elle m'a supprimé le contenu de tout le fichier.

    Voilà mon programme
    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
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.List;
    import java.util.*;
    import java.io.*;
     
    public class PurgeTest {
     
        public static void main(String args[]) {
     
            ArrayList<String> arrayOfStrings = new ArrayList<String>();
     
            try {
     
                BufferedReader reader = new BufferedReader(new FileReader("D:\\subst"));
                FileWriter fstream = new FileWriter("D:\\subst");
                BufferedWriter out = new BufferedWriter(fstream);
     
                String line = "";
                while ((line = reader.readLine()) != null) {
     
                    arrayOfStrings.add(line);
     
                    HashSet<String> h = new HashSet<String>(arrayOfStrings);
     
                    arrayOfStrings.clear();
                    arrayOfStrings.addAll(h);
                }       
     
                for (String readline : arrayOfStrings) {
     
                    out.write(readline + "\n");
                }
     
                out.close();
                reader.close();
     
            } catch (Exception ex) {
     
                System.out.println("Exception: " + ex.getMessage()); 
           }
        }
    }
    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Bonjour,

    A vue de nez, tu lis et tu écris en même temps dans le même fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BufferedReader reader = new BufferedReader(new FileReader("D:\\subst"));
    FileWriter fstream = new FileWriter("D:\\subst");
    On ne fait jamais cela. Commence par faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileWriter fstream = new FileWriter("D:\\subst_out");
    Enfin je ne vois pas la partie de ton code qui te permet d'éliminer les doublons.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    J'ai rien compris à ton algo, j'ai surtout l'impression que c'est fait n'importe quoi.
    Pour éliminer les doublons d'un fichier (je pense qu'il y a un bon milliers de tutos sur le net mais passons), tu parcours mot par mot ton fichier et tu regardes dans ton tableau de mots découverts. Si le mot y est, tu le supprimes, sinon tu l'ajoutes dans ton tableau.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par nchal Voir le message
    J'ai rien compris à ton algo, j'ai surtout l'impression que c'est fait n'importe quoi.
    En gros elle a juste pas trouvé comment conserver l'ordre des données.

    Son principe est, "charger le fichier entièrement en mémoire, et mémoriser tout ce qui n'est pas en doublon. Pour éviter de stocker des doublons, j'utilise HashSet. Mais les données qui ne sont pas en doublon, je voudrais les conserver dans l'ordre de leur apparition. Or HashSet ne conserve pas l'ordre. Donc j'utilise aussi une List qui conserve l'ordre."
    Bien sûr ça ne conserve pas l'ordre, puisque ce code efface la List à chaque boucle, puis la repeuple dans l'ordre du HashSet. La List est donc inutile, seul le HashSet intervient, et il ne garde pas l'ordre.

    La solution est d'utiliser LinkedHashSet à la place d'un HashSet et d'une List. LinkedHashSet conserve les éléments dans l'ordre de leur insertion.

    Par ailleurs, il reste le problème déjà soulevé : on ne peut pas commencer à écrire dans un fichier, avant d'avoir refermé la lecture de ce fichier. reader.close() doit être appelé avant d'ouvrir en écriture. Ce qui veut dire que FileWriter doit être appelé après avoir appelé reader.close().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    merci bcp j'ai résolu mon problème

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Vérifier les doublons dans un fichier texte
    Par Shyboy dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2007, 09h34
  3. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  4. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

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