• [^] # Re: table de hachage

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

    C'est plus un principe de précaution, il est question de gros sous ...

    J'ai reussi a faire ce que je voulais en passant par des tables de hachage.

    J'ai un peu galèrer a tous comprendre mais une fois assimiler c'est super pratique ce machin là ^ .

    Le traitement dure environ 1m30.

    #Tables de hash des unions et intersections des deux fichiers
    %inter = ();
    %union = ();
    #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 chaque fichiers dans des tableaux
    while(<FILE>){
     chomp();
     @ligne = split(/;/,$_);
     push(@index1,$ligne[7]);
    }
    while(<FILE2>){
     chomp();
     @ligne2 = split(/;/,$_);
     push(@index2,$ligne2[7]);
    }
    #Fermeture des fichiers
    close(FILE);
    close(FILE2);
    #On mes tous les elements du premier tableau dans l'union
    foreach $a (@index1) {
     $union{$a} = 1;
    }
    #Pour tous les elements du second tableau
    foreach $a (@index2) {
     #Si il existe dans l'union, c'est qu'il est dans les tableau precedant
     #Il est donc placer dans l'inter
     if ( exists ($union{$a} ) )
     {
     $inter{$a} = 1;
     }
    }
    # reconstitution des tableaux à partir
    # des tables de hachage
    my @inter = keys(%inter);