• [^] # Re: table de hachage

    Posté par . En réponse au message Traitement de gros fichier. Évalué à 3. Dernière modification le 25 mars 2015 à 16:01.

    C'est un bon début :)

    Il est possible de simplifier largement ton traitement (au vu de ton énoncé) en n'utilisant qu'un seul hash contenant toutes les informations dont tu as besoin :

    #!/usr/bin/perl
    #Tables de hash contenant en clé la référence et en valeur la ligne à afficher
    %lignes_a_afficher = ();
    #Ouverture des fichiers, tue le script en cas d'echec
    open(FILE,"fichier_1.txt") or die;
    open(FILE2,"fichier_comp") or die;
    #Chargement des references et des lignes à afficher dans le hash à partir du premier fichier
    while(<FILE>){
     chomp();
     @ligne = split(/;/,$_);
     $lignes_a_afficher{$ligne[7]} = $_;
    }
    close(FILE);
    #Vérification de la présence de la ref dans le second fichier, si elle est présente on l'enlève des lignes à afficher
    while(<FILE2>){
     chomp();
     @ligne2 = split(/;/,$_);
     if (exists $lignes_a_afficher{$ligne2[7]}) {
     delete $lignes_a_afficher{$ligne2[7]};
     }
    }
    close(FILE2);
    #Affichage 
    foreach my $ligne_a_afficher (values(%lignes_a_afficher)) {
     print $ligne_a_afficher."\n";
    }