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

Langage Perl Discussion :

supprimer des doublons dans un tableau


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Points : 18
    Points
    18
    Par défaut supprimer des doublons dans un tableau
    Bonjour,

    J'aurais besoin d'un petit coup de main. J'ai un tableau à deux colonnes remplies de deux types d'identifiants :

    aabb-bbcc zzvv-uuqq
    aabb-bbcc zzvv-uuqq
    aabb-bbcc sstt-uuww
    ddee-ffgg sstt-uuww
    ddee-ffgg
    etc... etc...

    J'aurais besoin d'éliminer les doublons de chaque colonne, sachant que certaines cellules peuvent être vides et que le fichier compte qqs 600 000 lignes.

    J'ai bien vu que pour ce genre de manipulation les tables de hachage semblaient être le meilleur moyen.Mais je ne suis pas sûre de maîtriser ce genre de code. Ma maîtrise de perl est encore assez primaire.

    Merci d'avance,
    H.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    oui, l'utilisation d'un hachage est généralement une très bonne solution pour éliminer des doublons.

    Avant de pouvoir t'aider, peux-tu préciser ce que tu appelles doublon? S'agit-il des lignes pour lesquelles les deux champs sont identiques? Autrement dit, dans ton exemple, seules les deux premières lignes serait en doublon, mais pas les autres car, pour les autres, l'un au moins des deux champs diffère. Est-ce cela.

    Ensuite, quelle est la structure Perl de ton tableau à deux colonnes en entrée? Un tableau de tableaux (AoA)? Autre chose? Ou tes données en entrée sont-elles pour l'instant un fichier texte? Dans ce cas, quel est le séparateur de champs?

    Le mieux serait que tu donnes un petit échantillon des données en entrée, ainsi que le résultat que tu attends.

  3. #3
    Membre à l'essai
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Points : 18
    Points
    18
    Par défaut échantillon de fichier
    Bonjour et merci pour votre réponse,

    Il s'agit en effet de supprimer pour lesquelles les deux champs sont identiques. Mon exemple n'était pas bon. J'ai joins un fichier txt. Le séparateur de champ est la tabulation. Sachant que l'une ou l'autre colonne peuvent être vides selon les cas.

    exampledoublons.txt

    J'ai un début de programme mais je bloque sur la structure de hachage. Je comprends bien le couple clé valeur mais je ne comprends pas comment ça marche dans le cas de doublons

    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
    #!/usr/bin/env perl
    #
    use strict;
    use warnings;
    my $fic='/............/Desktop/fichierentree.txt';
    my $sel='/........../Desktop/fichiersortie.txt';
     
     
    open my $FILE, "<" , $fic or die "Ouverture impossible de $fic $!";
    open my $FICHIER,">", $sel;
     
     
    #déclaration de mon tableau
    my @cols;
     
     
    while (my $ligne = <$FILE>)
     
    {
     
    @cols = split(/\t/,$ligne);
    #crée un tableau à partir du fichier text
     
     #.....
     
    print $FICHIER ,"\n";
     
    }
     
    close $FILE;
    close $FICHIER;
    Merci de votre aide.
    H.

  4. #4
    Membre à l'essai
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Points : 18
    Points
    18
    Par défaut échantillon doublon
    voici un exemple de mon fichier texte :
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    en fait, si j'ai bien compris ce que tu cherches à faire, tu n'as même pas besoin de faire un split sur les lignes de ton fichier en entrée: il suffit de dédoublonner les lignes entières de ton fichier.

    Pour simplifier le test de mon programme, dans le code ci-dessous, j'ai mis en commentaire les instructions relatives au fichier de sortie et me suis contenté d'afficher le résultat à l'écran:
    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
     
    #!/usr/bin/env perl
     
    use strict;
    use warnings;
    my $fic = 'exempledoublons.txt';
    # my $sel='/........../Desktop/fichiersortie.txt';
     
     
    open my $FILE, "<" , $fic or die "Ouverture impossible de $fic $!";
    # open my $FICHIER,">", $sel;
     
    my %hachage;    # déclaration du hachage
     
    while (my $ligne = <$FILE>) {
    	$hachage{$ligne} = 1;
    }
    print for keys %hachage;
    close $FILE;
    # close $FICHIER;
    Comme tu le vois, j'utilise la ligne entière du fichier comme clef du hachage et donne à chaque élément une valeur quelconque (ici 1) dont je ne me sers pas ensuite. A la fin, j'imprime simplement les clefs du hachage ainsi créé.

    A l'exécution (avec ton fichier de test), cela affiche bien un seul exemplaire de chacune des lignes trouvées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ISSNREV ISSNELECTRONICO
            0717-554X
    1870-3925       2448-4849
    A noter qu'un hachage n'a pas d'ordre déterminé (l'ordre paraît aléatoire). Dans l'exemple ci-dessus, les lignes sont affichées dans le même ordre que dans le fichier en entrée, mais c'est un hasard, on pourrait avoir un autre ordre lors d'une autre exécution. Si l'ordre a de l'importance, il faudrait s'y prendre un peu différemment.

  6. #6
    Membre à l'essai
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup pour votre réponse. Je vais tester ce script.

    H.

  7. #7
    Membre à l'essai
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup. Ce script marche très bien !
    H.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Tant mieux si ça marche comme tu le désires, et merci d'avoir répondu, ça fait toujours plaisir d'avoir un retour.

    Juste une dernière chose : peux-tu passer le fil en "résolu" ?

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

Discussions similaires

  1. supprimer des doublons dans un Tableau
    Par www.rubis dans le forum Langage
    Réponses: 3
    Dernier message: 10/02/2011, 15h23
  2. Réponses: 7
    Dernier message: 09/02/2009, 14h28
  3. Requête pour supprimer des doublons dans une table
    Par nomade333 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2008, 12h48
  4. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04
  5. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15

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