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 :

Les tableaux multidimentionnels pas trés clairs


Sujet :

Langage Perl

  1. #41
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    étant donné que tu appelles ta fonction hashfichier comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my %P_files_hash_1 = hashfichier(@T_fic1 );
    my %P_files_hash_2 = hashfichier(@T_fic2 );
    ceci ne va pas marcher correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub hashfichier {
     
    	my %retourne_hash = shift;                   # table de hash
            # ...
     
     
     
     
    pour autant
    Car tu passes un tableau à ta fonction et, dans la fonction l'interprète comme un hachage. Cela ne va pas générer d'erreur de syntaxe à la compilation, parce que Perl passe de toute façon la structure de donnée comme une simple liste, mais la logique n'est pas bonne: la fonction s'attend à recevoir des paires clef-valeur et ce n'est pas ce que tu lui passes.

    voila pourquoi j'ai --> Odd number of elements in hash assignment at lirefic-v2.pl line 32.

    ceci étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my %retourne_hash = %{$retourne_hash_ref};
    en ajoutant ce code eclipse retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "my" variable %retourne_hash masks earlier declaration in same scope
    Global symbol "$retourne_hash_ref" requires explicit package name (did you forget  to declare "my $retourne_hash_ref"?)

  2. #42
    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
    Citation Envoyé par dedalios Voir le message
    voila pourquoi j'ai --> Odd number of elements in hash assignment at lirefic-v2.pl line 32.
    Exactement. Si tu as de la "chance", le nombre d'éléments est pair et ça semble fonctionner. Ou, ça, c'est plutôt si tu n'as pas de chance. Car, au moins, avec un nombre d'éléments impair (odd), l'interpréteur t'avertit du problème.

    Pour le reste, je ne sais pas où est ton problème, mais, moi, je n'ai pas d'erreur de compilation avec cette fonction:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    sub hashfichier {
    	my $retourne_hash_ref = shift;    # référence à une table de hash
    	my %retourne_hash = %{$retourne_hash_ref};
    	my @T_fic = @_;
     
    	foreach my $name (@T_fic) {
     
    		my $extension;
    		my $line_nbr     = compteurdeligne_fichier($name);
    		my $taillefic    = -s $name;
    		my @deffic       = Nomfic($name);
    		my ($nomdufichier, $repert)       = $deffic[0,1];
    		my $horodate     = substr( $repert, 0, 14 );
    		if ( $nomdufichier =~ m/.err/ ) {
    			$extention = '.err';
    		}
    		elsif ( $nomdufichier =~ m/.dat/ ) {
    			$extention = '.dat';
    		}
    		else {
    			$extention = 'autre';
    		}
    		$retourne_hash{$nomdufichier} = {
    			Vacation => $name,
    			Taille   => $taillefic,
    			NBRLigne => $line_nbr,
    			Rep      => $repert,
    			HoroD    => $horodate,
    			Ext      => $extention,
    			top      => "faux"
    		};
    	}
    	return %retourne_hash;    # renvoi d'un hachage
    }
    Mais, bien entendu, cela ne pourra marcher que si tu lui passes bien une référence à un hachage, et ce n'est pas ce que fait le reste de ton code.

  3. #43
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    voici ce qu'éclipse met


    my" variable %retourne_hash masks earlier declaration in same scope
    Global symbol "$retourne_hash_ref" requires explicit package name


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    use strict;    # controle
    use warnings;
    use Data::Dumper;
     
    #strict et warnings : sont deux modules internes a Perl permettant de verifier la syntaxe de votre code et de vous alerter a la compilation du programme ;
    require "./Fonctions/FonctionFichiers.pl";
     
    # ------------------------------------------------------------------------------------
    # fonctions internes
    # ------------------------------------------------------------------------------------
     
    sub hashfichier {
     
    	my %retourne_hash = shift;                   # table de hash
      	my %retourne_hash = %{$retourne_hash_ref};
     
    	my @T_fic         = @_;
     
    	foreach my $name (@T_fic) {
    		my $extention;
     
    		#debug mode
    		print "$name\n";
    		my $line_nbr     = compteurdeligne_fichier($name);
    		my $taillefic    = -s $name;
    		my @deffic       = Nomfic($name);
    		my $repert       = $deffic[1];
    		my $nomdufichier = $deffic[0];
    		my $horodate     = substr( $repert, 0, 14 );
    		my $nom_ori =  $nomdufichier; 
    		if ( $nomdufichier =~ m/.err/ ) {
    			$extention = '.err';
     
    		}
    		elsif ( $nomdufichier =~ m/.dat/ ) {
    			$extention = '.dat';
    		}
    		else {
    			$extention = 'autre';
    		}
    		$retourne_hash{$nomdufichier} = {
    			Nomori => $nom_ori ,
    			Vacation => $name,
    			Taille   => $taillefic,
    			NBRLigne => $line_nbr,
    			Rep      => $repert,
    			HoroD    => $horodate,
    			Ext      => $extention,
    			top      => "faux"
    		};
    	}
     
    	 	 return %retourne_hash;
    }
     
    # variable global
    my $fichier_1 = $ARGV[0];
    my $fichier_2 = $ARGV[1];
    my @T_fic1    = undef;
    my @T_fic2    = undef;
     
    my $nmfic_1;
    my $header_fic_log = "";
     
    # debut code
    # doit contenir : nom du fichier + longueur.
    # print " $ARGV[0] \n";
    # print " $ARGV[1] \n";
     
    # liste les fichiers *.dat des repertoire
    # print "Appel aux fonctions \n";
    @T_fic1 = listedesfichiers( $ARGV[0], "*.dat" );
    push( @T_fic1, listedesfichiers( $ARGV[0], "*.err" ) );
     
    @T_fic2 = listedesfichiers( $ARGV[1], "*.dat" );
    push( @T_fic2, listedesfichiers( $ARGV[1], "*.err" ) );
     
    ######################
    # MAIN               #
    ######################
     
    #debug mode
    #  print  ("@T_fic1 \n ");
    #  print  ("@T_fic2 \n ");
     
    # definir le nom du fichier log
    my $valeur    = "/";
    my @T_FIC     = split( /${valeur}/, $ARGV[0] );
    my $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "../Logs/${nomficlog}.log";    # Fichier de log
     
    open( my $fichierlog, '+>', $nomficlog ) or die("open: $!");
    print( $fichierlog "Information des actions de ${nomficlog} \n \n" );
     
    my $nbfic1 = $#T_fic1 + 1;                  # compte le nombre de fichier
    print( $fichierlog " Nombre des fichiers  .dat  .err :  $nbfic1   \n" );
     
    print("FICHIER a LIRE $nomficlog @T_fic1  \n");
     
    my %files_hash_1 = hashfichier(@T_fic1 );
    my %files_hash_2 = hashfichier(@T_fic2 );
     
    #print Dumper \%files_hash_1;
    #print Dumper \%files_hash_2;
     
    print "fin";
     
    # traitement 2 pass
    @T_FIC     = split( /${valeur}/, $ARGV[1] );
    $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "${nomficlog}.log";
    print( $fichierlog "\n \n Comparaison avec ${nomficlog} \n " );
    my $nbfic2 = $#T_fic2 + 1;    # compte le nombre de fichier
     
    close($fichierlog);
    exit;
    ou au lancement

    "my" variable %retourne_hash masks earlier declaration in same scope at lirefic-v2.pl line 33.
    Global symbol "$retourne_hash_ref" requires explicit package name at lirefic-v2.pl line 33.

  4. #44
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    use strict;    # controle
    use warnings;
    use Data::Dumper;
    
    #strict et warnings : sont deux modules internes a Perl permettant de verifier la syntaxe de votre code et de vous alerter a la compilation du programme ;
    require "./Fonctions/FonctionFichiers.pl";
    
    # ------------------------------------------------------------------------------------
    # fonctions internes
    # ------------------------------------------------------------------------------------
    
    sub hashfichier {
    	my %retourne_hash = shift;   #la j'ai du mal que l'on obtient pas défaut le premier paramètre? shift(@_)  ne serait ilpas plus logique?
    
    
    
    
    #  Global symbol "$retourne_hash_ref" requires explicit package name
    #  "my" variable %retourne_hash masks earlier declaration in same scope
    [/I]
    [/COLOR]
    
    	my %retourne_hash = %{$retourne_hash_ref};
    	my @T_fic         = @_;
    
    
    	foreach my $name (@T_fic) {
    		my $extention;
    
    		#debug mode
    		print "$name\n";
    		my $line_nbr     = compteurdeligne_fichier($name);
    		my $taillefic    = -s $name;
    		my @deffic       = Nomfic($name);
    		my $repert       = $deffic[1];
    		my $nomdufichier = $deffic[0];
    		my $horodate     = substr( $repert, 0, 14 );
    		my $nom_ori      = $nomdufichier;
    		if ( $nomdufichier =~ m/.err/ ) {
    			$extention = '.err';
    
    		}
    		elsif ( $nomdufichier =~ m/.dat/ ) {
    			$extention = '.dat';
    		}
    		else {
    			$extention = 'autre';
    		}
    		$retourne_hash{$nomdufichier} = {
     			Nomori   => $nom_ori,
    			Vacation => $name,
    			Taille   => $taillefic,
    			NBRLigne => $line_nbr,
    			Rep      => $repert,
    			HoroD    => $horodate,
    			Ext      => $extention,
    			top      => "faux"
    		};
    	}
    
    	return \%retourne_hash;           # renvoi d'une référence au hachage
    }
    
    # variable global
    my $fichier_1 = $ARGV[0];
    my $fichier_2 = $ARGV[1];
    my @T_fic1    = undef;
    my @T_fic2    = undef;
    
    my $nmfic_1;
    my $header_fic_log = "";
    
    # debut code
    # doit contenir : nom du fichier + longueur.
    # print " $ARGV[0] \n";
    # print " $ARGV[1] \n";
    
    # liste les fichiers *.dat des repertoire
    # print "Appel aux fonctions \n";
    @T_fic1 = listedesfichiers( $ARGV[0], "*.dat" );
    push( @T_fic1, listedesfichiers( $ARGV[0], "*.err" ) );
    
    @T_fic2 = listedesfichiers( $ARGV[1], "*.dat" );
    push( @T_fic2, listedesfichiers( $ARGV[1], "*.err" ) );
    
    ######################
    # MAIN               #
    ######################
    
    #debug mode
    #  print  ("@T_fic1 \n ");
    #  print  ("@T_fic2 \n ");
    
    # definir le nom du fichier log
    my $valeur    = "/";
    my @T_FIC     = split( /${valeur}/, $ARGV[0] );
    my $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "../Logs/${nomficlog}.log";    # Fichier de log
    
    open( my $fichierlog, '+>', $nomficlog ) or die("open: $!");
    print( $fichierlog "Information des actions de ${nomficlog} \n \n" );
    
    my $nbfic1 = $#T_fic1 + 1;                  # compte le nombre de fichier
    print( $fichierlog " Nombre des fichiers  .dat  .err :  $nbfic1   \n" );
    
    print("FICHIER a LIRE $nomficlog @T_fic1  \n");
    
    my $P_files_hash_1 = hashfichier( \%params, @T_fic1 );
    my $P_files_hash_2 = hashfichier( \%params, @T_fic2 );
    
    #Global symbol "%params" requires explicit package name
    
    #my %files_hash_1 = hashfichier(@T_fic2 );
    #my %files_hash_2 = hashfichier(@T_fic2 );
    
    #print Dumper \%files_hash_1;
    #print Dumper \%files_hash_2;
    
    print "fin";
    
    # traitement 2 pass
    @T_FIC     = split( /${valeur}/, $ARGV[1] );
    $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "${nomficlog}.log";
    print( $fichierlog "\n \n Comparaison avec ${nomficlog} \n " );
    my $nbfic2 = $#T_fic2 + 1;    # compte le nombre de fichier
    
    close($fichierlog);
    exit;

    dans l’idée j'ai un paramètre qui contient la liste des fichiers d'un répertoire.
    et je veux pour chacun des ces fichiers avoir dans une table de hash le detail des analyse.
    le nom du fichier devient l'index ou cle de la table hash , puis nous avons une liste d'information.

    définir un objet pourrais être autre solution.

  5. #45
    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
    Citation Envoyé par dedalios Voir le message
    voici ce qu'éclipse met


    my" variable %retourne_hash masks earlier declaration in same scope
    Global symbol "$retourne_hash_ref" requires explicit package name
    Parce que ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	my %retourne_hash = shift;                   # table de hash
      	my %retourne_hash = %{$retourne_hash_ref};
    et le mien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	my $retourne_hash_ref = shift;    # référence à une table de hash
    	my %retourne_hash = %{$retourne_hash_ref};
    sont différents.

  6. #46
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     
            my $retourne_hash_ref = shift;    # référence à une table de hash
    	my %retourne_hash = %{$retourne_hash_ref}; # Peux tu m'expliquer ce qu'exprime cette ligne d'affectation
    Le premier OK , encore faut-il que l'appel soit correcte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    my $P_files_hash_1 = hashfichier( \%params, @T_fic1 );
    my $P_files_hash_2 = hashfichier( \%params, @T_fic2 );
     
    print Dumper \%P_files_hash_1;
    print Dumper \%P_files_hash_2;

    [/CODE]
    Global symbol "%params" requires explicit package name (did you forget to declare "my %params"?)
    Global symbol "%params" requires explicit package name (did you forget to declare "my %params"?)

    Global symbol "%P_files_hash_1" requires explicit package name (did you forget to declare "my %P_files_hash_1"?)
    Global symbol "%P_files_hash_1" requires explicit package name (did you forget to declare "my %P_files_hash_2"?)

  7. #47
    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
    OK.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	my $retourne_hash_ref = shift;    # référence à une table de hash
    	my %retourne_hash = %{$retourne_hash_ref}; # Peux tu m'expliquer ce qu'exprime cette ligne d'affectation
    Le shift récupère le premier paramètre passé à la fonction. Qui était une référence à un hash à un moment donné, a changé à un moment donné et est apparemment à nouveau un hachage. La seconde ligne crée un hachage et y met les données provenant du hachage dont tu as la référence. On peut travailler directement sur les références, mais la syntaxe étant un peu plus complexe, je préférais pour te simplifier la vie que tu puisse travailler sur un hachage plutôt que sur une référence à un hachage.

    L'appel à la fonction ne correspond plus tout à fait à ce schéma:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $P_files_hash_1 = hashfichier( \%params, @T_fic1 );
    my $P_files_hash_2 = hashfichier( \%params, @T_fic2 );
    Là, tu sembles passer à la fonction une référence à un hachage %params (ce qui cohérent avec ce que fait la fonction), mais il semble que ce hachage n'existe pas au moment de l'appel; du coup tu as le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Global symbol "%params" requires explicit package name (did you forget to declare "my %params"?)
    Global symbol "%params" requires explicit package name (did you forget to declare "my %params"?)
    Le seuxième paramètre, le tableau est en principe bien récupéré comme il faut dans la fonction quand tu utilises @_ pour affecter un tableau local à la fonction, ça c'est bon (du moins syntaxiquement).

    Ensuite, toujours dans le code ci-dessus, tu affectes ce que renvoie la fonction hashfichier à une variable scalaire (commençant pas $), alors que la fonction, aux dernières nouvelles, renvoie un hachage. Ce n'est pas cohérent.

    Enfin, ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print Dumper \%P_files_hash_1;
    print Dumper \%P_files_hash_2;
    Tu utilises P_files_hash_1 et P_files_hash_2 comme si c'étaient des hachages, alors que tu viens de les déclarer comme des scalaires, d'où les deux autres messages d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Global symbol "%P_files_hash_1" requires explicit package name (did you forget to declare "my %P_files_hash_1"?)
    Global symbol "%P_files_hash_1" requires explicit package name (did you forget to declare "my %P_files_hash_2"?)
    D'un point de vue syntaxique (et en supposant que %params existe), il faudrait avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my %P_files_hash_1 = hashfichier( \%params, @T_fic1 );
    my %P_files_hash_2 = hashfichier( \%params, @T_fic2 );
     
    print Dumper \%P_files_hash_1;
    print Dumper \%P_files_hash_2;
    Cela devrait résoudre les problèmes de syntaxe, mais je persiste à ne pas bien comprendre pourquoi tu fais des choses aussi compliquées, je ne comprends pas ta logique.

    En gros, si ton hachage doit être alimenté dans la fonction, alors ne te casse pas la tête à le créer avant: passe juste ton tableau à la fonction, créer ton hachage dans la fonction et renvoie le hachage. En pseudo code pour simplifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sub fonction {
        my @tableau = @_;
        my %local_hachage; # juste une déclaration pour utiliser le hachage
     
        # code pour remplir le hachage
        return %local_hachage;
    }
     
    # appel de la fonction:
    my %hachage_resultat = fonction(@tableau_données_entrée);
     
    print Dumper \%hachage_resultat;

  8. #48
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 493
    Points : 152
    Points
    152
    Par défaut
    Effectivement bien plus simple.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    # ------------------------------------------------------------------------------------
    use strict;    # controle
    use warnings;
    use Data::Dumper;
     
    #strict et warnings : sont deux modules internes a Perl permettant de verifier la syntaxe de votre code et de vous alerter a la compilation du programme ;
    require "./Fonctions/FonctionFichiers.pl";
     
    # ------------------------------------------------------------------------------------
    # fonctions internes
    # ------------------------------------------------------------------------------------
     
    sub hashfichier {
     
        my %retourne_hash;# tabelau construit et retourné
    	my @T_fic   = @_;
     
     
    	foreach my $name (@T_fic) {
    		my $extention;
     
    		#debug mode
    		print "$name\n";
    		my $line_nbr     = compteurdeligne_fichier($name);
    		my $taillefic    = -s $name;
    		my @deffic       = Nomfic($name);
    		my $repert       = $deffic[1];
    		my $nomdufichier = $deffic[0];
    		my $horodate     = substr( $repert, 0, 14 );
    		my $nom_ori      = $nomdufichier;
    		if ( $nomdufichier =~ m/.err/ ) {
    			$extention = '.err';
     
    		}
    		elsif ( $nomdufichier =~ m/.dat/ ) {
    			$extention = '.dat';
    		}
    		else {
    			$extention = 'autre';
    		}
    		$retourne_hash{$nomdufichier} = {
     			Nomori   => $nom_ori,
    			Vacation => $name,
    			Taille   => $taillefic,
    			NBRLigne => $line_nbr,
    			Rep      => $repert,
    			HoroD    => $horodate,
    			Ext      => $extention,
    			top      => "faux"
    		};
    	}
     
    	return %retourne_hash;           # renvoi d'une référence au hachage
    }
     
    # variable global
    my $fichier_1 = $ARGV[0];
    my $fichier_2 = $ARGV[1];
    my @T_fic1    = undef;
    my @T_fic2    = undef;
     
    my $nmfic_1;
    my $header_fic_log = "";
     
    # debut code
    # doit contenir : nom du fichier + longueur.
    # print " $ARGV[0] \n";
    # print " $ARGV[1] \n";
     
    # liste les fichiers *.dat des repertoire
    # print "Appel aux fonctions \n";
    @T_fic1 = listedesfichiers( $ARGV[0], "*.dat" );
    push( @T_fic1, listedesfichiers( $ARGV[0], "*.err" ) );
     
    @T_fic2 = listedesfichiers( $ARGV[1], "*.dat" );
    push( @T_fic2, listedesfichiers( $ARGV[1], "*.err" ) );
     
    ######################
    # MAIN               #
    ######################
     
    #debug mode
    #  print  ("@T_fic1 \n \n");
    #  print  ("@T_fic2 \n \n \n");
     
    # definir le nom du fichier log
    my $valeur    = "/";
    my @T_FIC     = split( /${valeur}/, $ARGV[0] );
    my $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "../Logs/${nomficlog}.log";    # Fichier de log
     
    open( my $fichierlog, '+>', $nomficlog ) or die("open: $!");
    print( $fichierlog "Information des actions de ${nomficlog} \n \n" );
     
     
    my $nbfic1 = $#T_fic1 + 1;                  # compte le nombre de fichier
    print( $fichierlog " Nombre des fichiers  .dat  .err :  $nbfic1   \n" );
     
    #print ("FICHIER a LIRE $nomficlog @T_fic1  \n");
     
     
    my %files_hash_1 = hashfichier(@T_fic1 );
    my %files_hash_2 = hashfichier(@T_fic2 );
     
    print Dumper \%files_hash_1;
    print "---------------------------------------- \n";
    print Dumper \%files_hash_2;
     
    print "fin";
     
    # traitement 2 pass
    @T_FIC     = split( /${valeur}/, $ARGV[1] );
    $nomficlog = $T_FIC[$#T_FIC];
    $nomficlog = "${nomficlog}.log";
    print( $fichierlog "\n \n Comparaison avec ${nomficlog} \n " );
    my $nbfic2 = $#T_fic2 + 1;    # compte le nombre de fichier
     
    close($fichierlog);
    exit;
    plus qu'a analyser les données.

Discussions similaires

  1. Morceau de script pas très clair
    Par rouget dans le forum Unix
    Réponses: 2
    Dernier message: 18/11/2010, 09h14
  2. Tracker un "File does not exist" pas très claire.
    Par Moustico dans le forum Apache
    Réponses: 2
    Dernier message: 10/06/2010, 14h11
  3. Paragraphe pas très clair
    Par lulu51 dans le forum Contrat
    Réponses: 26
    Dernier message: 22/04/2008, 16h01
  4. CRC-32 Pas très clair
    Par Goundy dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 17/10/2006, 21h04
  5. [Tableaux] pas très sur de la méthode...
    Par Thierry8 dans le forum Langage
    Réponses: 7
    Dernier message: 12/10/2005, 13h25

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