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 :

Comment trier un tableau, et repérer les doublon?


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut Comment trier un tableau, et repérer les doublon?
    Bonjour,

    Je dispose d'un fichier dont la structure est celle ci:

    ^USER^Name^surname^poid^âge

    Mon fichier possede plein d eligne de ce genre.

    Je lis dont mon fichier et mets toutes ces informations dans un tableau. Une cellule reprsentant une ligne.

    Maintenant j'aimerai bien faire unt ri alphabétique en fonction de Name et de surname.
    Et si l'information si un Name et surname ets en double, rajouter un nombre apres le name

    soi Name1

    name2
    name3
    ...

    Comment puis je faire cela??

    J'avais penser a une hasliste mais je sais pas comment.

    Dans l'attente merci d'avance

  2. #2
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    SAlut je suis débutant en perl, mais tu peux essayer qqechose 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
    14
    15
    16
    17
     
    my (%hashes, @split_tab);
    while (tu_lit_ton_fichier) {
    @split_tab = split(/^/, $ma_ligne_du_fichier);
     
    if (exists($hashes{$tab[1]})) { #le hashes existes
        $hashes{$tab[1]}{nb_occurance}++; 
    } else {
        $hashes{$tab[1]}{user} = $tab[0];
        $hashes{$tab[1]}{name} = $tab[1];
        $hashes{$tab[1]}{surname} = $tab[2];
        $hashes{$tab[1]}{poid} = $tab[3];
        $hashes{$tab[1]}{name} = $tab[4]; 
        $hashes{$tab[1]}{nb_occurance} = 1
    }
     
    }
    c'est pasl e code le plus performant mais c'est seulement une ébauche de ton cas pour le mettre dans un hashes

    De plus, il ne fonctionne surement pas. J'ai surement fait qqe erreur, a toi de l'essayer

    @+ et bonne continuation
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    merci

    mais j'ai essayé mais j'arrive pas.

    je cherche encore

  4. #4
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Ma solution pour ce qui est des doublons 'NAME'.
    Celle de Shwin est pas mauvaise aussi.
    Pour le reste (tri alpha), essaie Google et la FAQ, ça marche pas mal...
    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
    my @contenu_fichier = ('^USER^name^surname^poids^age');
    my %hash;
    foreach(@contenu_fichier) { 
        my @split_tab = split(/\^/);# découpage de la cellule en autant de cellules qu'il y a de '^' 
        my $libelle = $split_tab[1];# correspond au nom
        if (exists $hash{$libelle}) {
            if ($libelle =~ /(\w+)(\d+)/) {# si on a 'name1' par exemple, on récupère le nom sans le chiffre et le chiffre seul afin de l'incrémenter
                $2++;
                $libelle = $1.$2;
            } else {# cas ou seulement 'name'
                $libelle .= "1";
            }
        }
        $hash{$libelle}->{user}    = $split_tab[0];
        $hash{$libelle}->{name}    = $split_tab[1];
        $hash{$libelle}->{surname} = $split_tab[2];
        $hash{$libelle}->{poids}   = $split_tab[3];
        $hash{$libelle}->{age}     = $split_tab[4];
    }
    Verre vide je te plains, verre plein, je te vide.

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    j'ai une fonction qui trie, mais supprime les doublons ou + en trop si ça t'interesse !!???

Discussions similaires

  1. Comment trier un tableau pour enlever les doublons ?
    Par MuLog dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2009, 20h54
  2. Comment trier un tableau avec VBScript ?
    Par djokerta dans le forum VBScript
    Réponses: 3
    Dernier message: 27/09/2007, 20h44
  3. [VB.NET2005]Comment trier un tableau de datarows
    Par kissskoool dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/09/2007, 14h08
  4. Réponses: 5
    Dernier message: 02/04/2007, 17h49
  5. Réponses: 5
    Dernier message: 13/06/2006, 11h08

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