PERL parsing hash table fichier

Fermé
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 15 oct. 2008 à 19:15
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 oct. 2008 à 17:20
Bonjour,

Pour la vue d'ensemble. J'ai une bonne 20aine de serveurs qui doivent utiliser une table de raisons
id_raison texte_raison

afin de qualifier certains logs (postfix pour ne pas les nommer)

j'ai un fichier de traitement des logs, je boucle dessus en perl, j'extrait de chaque ligne une "raison" de bounce.
maintenant le but est de trouver l'id_raison correspondant à cette raison, comme il ya plein de serveur et que je veux pas charger la base sql, je veux faire une sorte de grep sur un fichier texte contenant la table en dur sur chaque serveur linux. Si la raison n'est pas dans le fichier ... il faut faire un appel à une page web d'admin pour ajouter la ligne dans la table (et donc obtenir son id) et mettre à jour le hash.

Pour cela j'ai déjà la partie de parse du fichier de log, j'ai aussi l'extraction de la raison. Je travail donc sur le hash de la table, j'ai reussi à faire un appel web à une page me renvoyant un fichier texte (merci à https://forum.hardware.fr/hfr/Programmation/Perl/urgent-appel-perl-sujet_114816_1.htm de la forme :
id_raison tabulation text_raison

Mon problème numéro 1 : - je ne parviens pas à le rentrer dans un hash (j'ai le content de la page dans une variable $data), j'imagine qu'il faut boucler sur chaque ligne et découper selon la tabulation mais ... impossible .... (je sais boucler sur le fichier passer en paramètre au fichier perl mais boucler sur le contenu d'une variable ...)


my $data;
my $result = fetch_url($raw_url,$data);

if ($result) {
	
	while ( $data )  {
		print $_;
		#$raisons{$k} = $v;
	}
}


La seconde question est (ou plutôt groupe de questions) ... comment gérer la mise à jour de la table hash ? dois-je la tie avec le fichier text pour qu'elle se mette à jour toute seule ? devrais-je récupérer l'ensemble de mon fichier ? ou juste faire un ajout avec le retour de l'appel à la page d'insertion ?

Je me demande d'ailleur s'il n'existe pas un moyen de transférer directement du contenu en hash sans passer par des boucles ....

J'espère que ceci n'est pas trop confus, merci d'avance pour votre aide ...

Stéphane
A voir également:

2 réponses

sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
16 oct. 2008 à 16:10
Bon,

J'ai progressé mais je me hurte à un soucis bizarre ...

Je met dans un tableau les raisons que je trouve, je fais un


if (exists( $raisons_nouvelles[$raison] ) ) {					
	# déjà dans le tableau
} else {
                $cpt_bad_unique ++;
	push (@raisons_nouvelles, $raison);
}


puis après ma boucle : 

open(ECRIRE,">$fichier_raisons_nouvelles") || die ("Erreur lors de l'ecriture de $fichier_raisons_nouvelles") ;
	foreach $laligne(@raisons_nouvelles){	
		print ECRIRE "$laligne\n";
	}
close(ECRIRE);



donc en clair, je devrais avoir un nouveau fichier avec des raisons différentes OR il n'en n'est rien ... :


$ cat raisons_manquantes.log -n
     1	 550 sorry, no mailbox here by that name (#5.1.1) 
     2	 550 5.1.1 <()> recipient rejected - JES UK 
     3	 550 5.1.1 <()> recipient rejected - JES UK 
     4	 550 sorry, no mailbox here by that name (#5.1.1) 
     5	 550 5.1.1 <()> recipient rejected - JES UK 
     6	 550 5.1.1 <()> recipient rejected - JES UK 
     7	 550 5.1.1 <()> recipient rejected - JES UK 
     8	 550 sorry, no mailbox here by that name (#5.1.1) 
     9	 550 5.1.1 <()> recipient rejected - JES UK 
    10	 550 5.1.1 <()> recipient rejected - JES UK 


Pourquoi tant de haine ... ??? ...

Stéphane
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 oct. 2008 à 17:20
Salut,

Je me demande d'ailleur s'il n'existe pas un moyen de transférer directement du contenu en hash sans passer par des boucles ....

Oui, c'est possible, mais il faut que tu arrives à me faire comprendre ce que tu veux ;-)

Voici de ce que j'ai besoin
Le ficher en entrée 

Montre ce que tu veux obtenir en sortie (exemple concret)
Pour le traitement on verras.
0