Bonjour,

Le script suivant me permet de recupperer la date et lheure de transaction
le type de transaction, ainsi que le temp que la transaction a mise pour etre effectué.

dans le code j'ai mis des commentaires PRB1, PRB2, PRB3, EXEMPLE1.
Afin que vous puissiez vous y retrouver facilement.

Le problème 1 (PRB1).
Je n'arrive pas a recupérer dans la trame le temp de reponce
je cherche la chaine de caractère <0.0123> ou les chiffres sont variable. et je veux récuperer que la même chose sans le <>. afin de pouvoir des calcules avec ses chiffre par la suite.

le problème 2 (PRB2) et le même que le PRB3
dans l'EXEMPLE1 j'utilise un Hachage pour effectuer un foreach.

si j'essaie de faire la même chose avec un hachage au niveau superieur
cela ne fonctionne pas. J'ai du metre le code en commentaire et utiliser une méthode qui ne me conviens pas.

de plus si vous avez une methode qui permet d'executer le code plus rapidement, je suis preneur.

merci a tous




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
 
#!/usr/bin/perl
# Configuration
#
use strict;
 
# Initialisaton des Variable
 
my $JOUR;
my $MOIS;
my $ANNEE;
my $HEURE;
my $MINUTE;
my $SECONDE;
my $ID_MACHINE;
my $PID;
my $MESSAGE;
my $TEMP;
 
# initialisation des Hachages
my %PARAM;
my %COMPTEUR;
 
$PARAM{REC}{NOM}="RECHARGEMENT";
$PARAM{REC}{EXPRESSION}="REC_";
$PARAM{REC}{TEMP_MAX};
$PARAM{REC}{TEMP_MOY};
 
$PARAM{CSL}{NOM}="CONSULTATION";
$PARAM{CSL}{EXPRESSION}="CSL_DOSCP";
$PARAM{CSL}{TEMP_MAX};
$PARAM{CSL}{TEMP_MOY};
 
 
### CODE
#
my $FICHIER=@ARGV;
while ( <> ) {
        chomp;
        ## Recupere dans la ligne les different champs composant la date et l'heure
        ($JOUR, $MOIS, $ANNEE, $HEURE, $MINUTE, $SECONDE, $ID_MACHINE, $PID, $MESSAGE )
                = /(\d+)\/(\d+)\/(\d+):(\d+)\/(\d+)\/(\d+) *(\w+) *(\d+) (.*)/ ;
 
        ## Recupere le temp de reponce de la trame
#PRB1
        if ( $MESSAGE =~ m/(\<\d\.\d+\>)/ ) {
                $_ = $&;
                my $TEMP = s/<|>//;
#               $TEMP = $&;
        }
        else {
                my $TEMP = 0.0000;
        }
#EXEMPLE1
        foreach my $param (sort keys %PARAM) {
                if ( $MESSAGE =~ /$PARAM{$param}{EXPRESSION}/ ) {
                        $COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE}{$MINUTE}++;
                }
        }
#               print "$TEMP \n";
}
 
# Affichage des resultats du traitement
 
foreach my $i  (0..59) {
#PRB2 foreach $i ( sort keys %COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE} ) {
        foreach my $param (sort keys %PARAM) {
                if ( $COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE}{$i} eq "" ) {
                $COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE}{$i} = 0;
                }
#PRB3  ( sort keys %COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE}) ;
         print "A la minute $i il y a eu  $COMPTEUR{$param}{$ANNEE}{$MOIS}{$JOUR}{$HEURE}{$i} $param\n";
        }
 
}

J'ai oublié de preciser que ce script doit traiter des fichiers de plus de 700 000 lignes.
Pour cet raison j'essai d'optimisser le code.
les fichiers ne sont pas tous au même format, c'est pour cette raison qu'il y a les variables au debut. ils serons deporter dans un fichier de conf par la suite.
Je ne peut pas installer de module perl.


merci pour vos réponces