Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

AIDE codage, problème de syntaxe, tableau associatif.

1 réponse
Avatar
NoSpam
Bonjour à tous,



Je dois produire des statistiques à partir de différents fichiers de logs
produits par un proxy. Le programme de statistique lit son entrée standard
et cumule les données dans des tableaux avant de les afficher.



Suivant le type de logs et parfois suivants les versions logiciels, les
fichiers de logs utilisent des champs communs mais dans un ordre qui peut
varier. Heureusement chaque fichier de logs dispose d'un premier
enregistrement qui décrit l'agencement des champs. Supposons que l'on puisse
récupérer cette agencement dans la variable $fields.



Pour illustrer :

Le fichier de logs HTTP du 10/05/2005 utilise les champs dans l'ordre
suivant:

$fields='date, heure, url, login, taille'

Le fichier de logs HTTP du 04/01/2008 utilise les champs dans l'ordre
suivant:

$fields='heure, date, url, login, taille'

le fichier de logs SSL utilise les champs dans l'ordre suivant:

$fields='ip, heure, date, url, certificat, taille'

et ainsi de suite.



Je compte passer par un seul tableau associatif : %T pour récupérer les
différents champs en se basant sur l'analyse du premier enregistrement.
Ainsi :

%T = (date, heure, url, login, taille ) pour le fichier http du
10/05/2005.

%T = (heure, date, url, login, taille ) pour le fichier http du 04/01/2008.

%T = (ip, heure, date, url, certificat, taille) pour le fichier
SSL.

Et autant de déclarations possibles en fonction du premier
enregistrement.



Malheureusement je n'arrive pas à écrire la syntaxe convenable qui me
permettrait de mettre %T au bon format pour lire mes données ;-(



Est-il possible d'avoir un seul tableau associatif qui puisse prendre en
compte les multiples formats de mes fichiers ?



Le programme en question ressemble à :



While (<STDIN>) {

If ( premier enregistrement ) {

$fields=.

Changer le format de %T comment l'écrire ?

%T =($fields) ; ne marche pas !

} else {

Lire les données et les charger dans %T comment l'écrire
?

En étant sûr au final que par exemple $T{url}
contient bien une url !

}

}



Merci pour votre aide précieuse et vos conseils.

1 réponse

Avatar
Nicolas George
"NoSpam" wrote in message
<5qR9k.4388$:
%T = (date, heure, url, login, taille )



Ce code-là ne peut pas marcher, à la base. Avant d'aller plus loin, je
conseille la lecture de la doc perldsc, sur la manière de construire des
structures de données en perl.