p
u
b
l
i
c
i
t
é
publicité

Discussion: Fusion de tableaux

  1. #1
    Invité de passage
    Inscrit en
    novembre 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : novembre 2012
    Messages : 9
    Points : 4
    Points
    4

    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 : 80
    Points
    80

    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
    Expert Confirmé Sénior


    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 742
    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 : 1 742
    Points : 4 689
    Points
    4 689
    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.
    La programmation fonctionnelle en Perl : 1. les opérateurs de liste; 2. les fonctions d'ordre supérieur; 3. étendre le langage.
    De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements

    _____
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

+ 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, 13h27
  2. Fusion des tableaux algorithme
    Par KnightofEmpire dans le forum Général Algorithmique
    Réponses: 1
    Dernier message: 22/11/2008, 12h39
  3. [Tableaux] Fusion de tableaux et array_merge
    Par wikipierre dans le forum Fonctions
    Réponses: 3
    Dernier message: 25/01/2008, 08h10
  4. Fusion de tableaux de points
    Par harry_kalagan dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/05/2007, 15h36
  5. [Tableaux] Fusion de tableaux associatifs
    Par laloupiote dans le forum Fonctions
    Réponses: 7
    Dernier message: 24/04/2007, 15h37

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