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 :

redondance dans un tableau multidimensionnel


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut redondance dans un tableau multidimensionnel
    bonjour,

    J'ai un tableau multidimensionnel et j'aimerais enlever la redondance dans celui-çi.

    exemple:
    fichier xxx
    aaa 127 132
    aaa 127 132
    aaa 48 52
    aaa 25 40
    aaa 25 40


    obtenir au final:
    aaa 127 132
    aaa 48 52
    aaa 25 40

    j'étais parti sur créer un tableau vide et le remplir au fur et à mesure avec ce qui est non redondant, mais c'est impossible à priori avec un tableau multidimensionnel.
    Quelqu'un a une idée svp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    open (F, "< xxx") or die("pbe ouverture!");
     
     
    my @tableau               =  ();
    my $nbre=0;
     
    while( my $ligne=<F>){
        if($ligne =~ /(^scaffold_[0-9]+)\t([0-9]+)\t([0-9]+)$/){
    	$nbre++;
    	$tableau[$nbre][1]=$1;
    	$tableau[$nbre][2]=$2;
    	$tableau[$nbre][3]=$3;
        }
    }



    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
    for (my $i = 0; $i <= $nbre; $i ++){
    my $unique = 0;
     BOUCLE: for (my $y = 0; $y <= $nb_final; $y ++){                                           
                        if ( ($tableau[$i][1] eq $final[$y][1]) && ($tableau[$i][2] = $final[$y][2]) && ($tableau[$i][3] = $final[$y][3])){ 
                            $unique = $y;
     
                            last BOUCLE;
                        }
                    }
            if ($unique == 0){#pas redondance
                    $nb_final ++; 
                    $final[$nb_final][1] = $tableau[$i][1]; 
    		$final[$nb_final][2] = $tableau[$i][2]; 
    		$final[$nb_final][3] = $tableau[$i][3]; 
            }         
    }
    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Tu pourrais faire un tableau à une dimension dans un premier temps lorsque tu parcours ton fichier, éliminer tes doublons puis faire un tableau multidimensionnel.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Tu peux utiliser une table de hashage de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    open (F, "< xxx") or die("pbe ouverture: $!");
     
    my @tableau               =  ();
    my %line_count;
    my $nbre=0;
     
    while( my $ligne=<F>){
      if(my @fields = $ligne =~ /(^scaffold_[0-9]+)\t([0-9]+)\t([0-9]+)$/){
        my $key = join "\t", @fields;
        push @tableau, [ @fields ] if !$line_count{$key}++; 
      }
    }
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut
    MERCI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for my $data (@tableau) {
       print "@$data\n";

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

Discussions similaires

  1. [PHP 5.2] utilisation de la fonction in_array dans un tableau multidimensionnel
    Par megaloplex dans le forum Langage
    Réponses: 1
    Dernier message: 23/08/2010, 13h59
  2. Supprimer les doublons dans un tableau multidimensionnel
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2010, 17h39
  3. Réponses: 3
    Dernier message: 06/12/2009, 15h02
  4. Réponses: 2
    Dernier message: 04/11/2007, 08h43
  5. redondance dans un tableau
    Par romuluslepunk dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 12/06/2006, 17h59

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