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 :

Fusion de tableaux


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Fusion de tableaux
    Bonjour,
    Je dispose d'un répertoire avec une centaine de fichiers de ce type :

    ID Chemin_acces_du_fichier
    1 1.2
    2 5.2
    3 1.3
    4 2.3
    ... ...
    2000 2.6

    La colonne ID est présente dans tous les fichiers. Le but est d'obtenir un unique tableau de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ID        Nom_du_fichier_1  Nom_du_fichier_2   ...  Nom_du_fichier_100   
    1          1.2                         2.3     ...  1.3   
    2          5.2                         1.2     ...  2.5   
    3          1.3                         0.9     ...  0.1   
    4          2.3                         8.6     ...  7.0   
    ...        ...                         ...     ...  ...   
    2000       2.6                         1.2     ...  4.6
    Voici le code que j'ai pour le moment :

    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
    open fichier, ">c:/data.xls";
    my $i=0;
    my $rep = "C:/Donnees";
    opendir(REP,$rep) or die "Dossier introuvable";
    while(defined(my $fic=readdir REP)){ 
    	my $f="${rep}/$fic";
    	open FIC, "$f" or warn "$f fichier introuvable";
    	$i=$i+1;	
      while(<FIC>){
    	chomp($_);
    	my @Tab=split("\t", $_);
    	$a = "$Tab[1]\n";
    	$T[$i]=($a);
    	print fichier @T;
    	}	
      }
    closedir(REP);
    J'obtiens une colonne des valeur du fichier 1, suivi de celles du fichier 2 etc...
    Je pense que la fonction pourrait m'aider mais je n'arrive pas à l'utiliser dans ce cas car je ne suis pas très à l'aise avec son utilisation.

    Si quelqu'un peut m'aider à débloquer ma situation je lui serai très reconnaissant
    D'avance merci !

  2. #2
    Membre régulier Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Points : 104
    Points
    104
    Par défaut
    Pour chaque fichier tu devrais:
    1. creer une array pour sotcker le chemin complet de chaque fichier que tu lis. Normalement ils sont uniques.
    2. creer un hash de hash avec pour cle de premier niveau le champ id de chaque ligne et comme cle de secon niveau le chemin complet de chaque fichier. La valeur a stocker dans la feuille de l'arbre est la valeur du champ Chemin_acces_du_fichier
    3. print le contenu de l'array cree en 1 dans l'ordre que tu veux pour avoir ton header en separant chaque valeur par le separateur de ton choix (on dirait que tu utilises des tab?)
    4. boucle sur les cles du hash cree en 2. Pour chaque sous hash, parcours l'array en 1 dans le meme ordre qu'en 3 et affiche la valeur ou '' avec le separateur de ton choix (tu prefereras sans doute stocker les valeurs ordonnees dans une array intermediare et print join l'array)

    Avec ca ca devrait marcher.
    In code we trust !!

  3. #3
    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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Si les numéros de fichiers et les ID sont toujours numériques, un tableau de tableaux devrait faire l'affaire, avec quelque chose comme cela (en supposant que les fichiers sont dans le répertoire relatif "./chemin"):

    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
    use Data::Dumper;
    my @file_list = glob ("chemin/*.*");
    chomp @file_list;
    my $file_nr = 0;
    my @summary;
    foreach my $file (@file_list) {
         open "$fh", "<", $file or die "ouverture impossible de $file $! \n";
         $file_nr ++;
         while (<$fh>) {
              chomp;
              my ($id, $val) = split;
              $summary[$file_nr][$id] = $val;
         }
         close $fh;
    }
    print Dumper \@summary;
    Si tu préfères vraiment utiliser la fonction push, tu peux faire un truc dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         while (<$fh>) {
              chomp;
              my ($id, $val) = split;
              push @{$summary[$file_number]}, $val;
         }
    mais cette solution est beaucoup moins sûre, parce qu'elle n'utilise pas l'ID, donc il faut garantir que tous les fichiers ont bien tous les ID, sans saut de séquence (sans ID manquant). De plus les indices du tableau interne iront de 0 à n-1, au lieu des ID de 1 à n. Bref, pour moi, la première syntaxe est bien meilleure, car elle assure un meilleur contrôle du résultat.

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

Discussions similaires

  1. problème avec fusion de tableaux
    Par soumti84 dans le forum Général Java
    Réponses: 11
    Dernier message: 08/07/2009, 14h27
  2. Fusion des tableaux algorithme
    Par KnightofEmpire dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 22/11/2008, 13h39
  3. [Tableaux] Fusion de tableaux et array_merge
    Par wikipierre dans le forum Langage
    Réponses: 3
    Dernier message: 25/01/2008, 09h10
  4. Fusion de tableaux de points
    Par harry_kalagan dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/05/2007, 16h36
  5. [Tableaux] Fusion de tableaux associatifs
    Par laloupiote dans le forum Langage
    Réponses: 7
    Dernier message: 24/04/2007, 16h37

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