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

Algorithmes et structures de données Discussion :

recherche de doublons dans un fichier texte


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut recherche de doublons dans un fichier texte
    bonjour a tous, voila, j'essaie de trouver le meilleur algo pour supprimer tout les doublons d'un fichier texte.
    les fichiers seront formatés de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    gfghghhggh
    ghghghg
    hgjhjjhjhjh
    ghhgjjhjhjhjh
    ghjhgjhjhjh
    fggyttyytuyu
    ghgujyuy
    hgghuuyyuu
    en gros , un mot par ligne et le but c'est de comparer l'ensemble de ses lignes.
    voici mes solutions :
    1 :
    la var list est un tstringlist , c'est elle qui charge le texte
    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
     
    while x < list.Count-2 do begin
    x := x+1;
    y := x;
       while y < list.Count -1 do begin
       y := y+1;
     
            if list[x] = list[y] then begin
            list.Delete(y);
     
            y := y-1;
     
            end;
     
     
     
       end;
     
    end;
    2 :

    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
     
    list.LoadFromFile(currentfile);
     
    list.Sort;
     
     
    x := -1;
     
    while x < list.Count-2 do begin
    x := x+1;
     
     
     
            if list[x] = list[x+1] then begin
            list.Delete(x+1);
            x := x-1;
            end;
     
     
     
     
     
    end;
    voila, la premiere methode traite le fichier comme il est, tandis que la deuxieme trie le les lignes par ordre alphabetique.

    resultat , la deuxieme solution est beaucoup plus rapide que la premiere mais pour des gros fichiers c'est quand meme assez lent.

    ps quand il y a un list.delete[x] le list[x+1] devient list[x] en gros ce qui est au dessus redescend.

    y a t'il des autres algo plus rapides.
    merci

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    1: Le sort, c'est toi qui l'a ecrit ?
    Si oui, tu peux ajouter une option (ou non) qui supprime (lors du tri) les doublons.

    2: Si non, :
    2a il a peut-etre une option qui supprime les doublons.
    2btu peux l'implementer toi-meme (voir quel algo est le plus rapide ? quick-sort?) et goto 1:

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 38
    Points : 42
    Points
    42
    Par défaut
    tout simple !

    tu charges ton fichier dans une tstringlist standard, puis tu prends chaque ligne que tu mets dans un autres tstringlist où tu as interdit les doublons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TaList->Sorted = true; 
    TaList->Duplicates = dupIgnore;
    Au final, ta liste n'a aucun doublons et ca devrait etre le plus rapide je pense !

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par scarabee
    tout simple !

    tu charges ton fichier dans une tstringlist standard, puis tu prends chaque ligne que tu mets dans un autres tstringlist où tu as interdit les doublons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TaList->Sorted = true; 
    TaList->Duplicates = dupIgnore;
    Au final, ta liste n'a aucun doublons et ca devrait etre le plus rapide je pense !
    oui je viens de le decouvrir , mais il est pas très rapidos pour les gros fichiers. Je me suis fait un programme qui effaçait tout les doublons (pas deleter la ligne) et ce programme s'avere très tres rapides (30 sec/ file de 100 mb de texte)mais le probleme c'est qu'il laisse des lignes blanches (sans texte) mais bon , apparament y a pas d'autre moyen.
    Je vais mettre mon post en resolu.
    merci a vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Chercher les doublons dans un fichier texte
    Par matt1704 dans le forum WinDev
    Réponses: 17
    Dernier message: 11/06/2009, 08h31
  2. Recherche de prix dans un fichier texte
    Par idoclub dans le forum Pascal
    Réponses: 6
    Dernier message: 18/03/2009, 17h03
  3. Rechercher des doublons dans un fichier de type csv
    Par phoenixatareva dans le forum C++
    Réponses: 6
    Dernier message: 12/08/2008, 20h02
  4. Vérifier les doublons dans un fichier texte
    Par Shyboy dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2007, 09h34
  5. Recherche de palindromes dans un fichier texte
    Par dyala dans le forum Pascal
    Réponses: 4
    Dernier message: 25/05/2007, 19h10

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