Gaston91 a écrit 6 commentaires

  • [^] # Re: table de hachage

    Posté par  . En réponse au message Traitement de gros fichier. Évalué à 1.

    Merci beaucoup c'est pile ce qu'il me fallais.

    Merci à tous pour votre aide :)

  • [^] # 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);
    
  • [^] # Re: table de hachage

    Posté par  . En réponse au message Traitement de gros fichier. Évalué à 1.

    Merci de ta reponse je vais essayer d'etre plus precis

    Ce traitement sera lancer occasionellement. Oui il y a une contrainte de temps, le script ne doit pas dépasser les 20mins. Pour ce qui est des ressources machine il y a pas de contrainte.

    Le champs 8 ( qui nous sert de reference entre les deux fichiers ) peut varier énormément.

    Les fichiers n'évolue pas, pour resumé le context on a effectuer une fusion entre deux entité et on veux vérifer que ce qui était dans l'entité A ce retrouve bien dans l'entité B.

    On a donc extrait le 1er fichiers avant fusion puis le second fichier après fusion. Les deux fichier sont des extrait de base de donnée mais je n'est pas la main sur les extractions je les recois tel quel.

    ex du fichier 1 ( ~ 7000 lignes ) :

    04129441;555;wJsQC0000OpkA;SOLEV003930;CR;11.69;wJsQC0000OpkA;MmDx90005bejL

    ex du fichier 2 ( + de 7 millions de lignes ) :

    00473316;009;wJsQC00006A50;109FL002698;CR;1.98;wJsQC00006A50;MmDx90004D59C

    J'espère que c'est plus claire comme sa.

  • [^] # Re: Un petit exemple ...

    Posté par  . En réponse au message Traitement de gros fichier. Évalué à 0.

    Ps : j'utilise perl V5.8.8 donc je peux pas utiliser l'operateur ~~ ( smart match ) =/

  • [^] # Re: Un petit exemple ...

    Posté par  . En réponse au message Traitement de gros fichier. Évalué à 0.

    C'est pas pour un exo mais pour mon boulot ;)

    Pour la deadline, bah des que vous pouvez =)

    Merci.

  • # Un petit exemple ...

    Posté par  . En réponse au message Traitement de gros fichier. Évalué à -2.

    Merci pour vos réponse, mais un petit exemple avec vos solution serais le bien venu, je suis vraiment une bille en perl ( mais j'ai pas le choix du langage … ).