Petit soucis - Perl - Programmation
Marsh Posté le 20-02-2007 à 16:02:45
http://perl.enstimac.fr/DocFr/perlfunc.html#item_eval
Mais ça sent pas bon ce que tu essaye de faire
Pourquoi tu fais pas directement:
Code :
|
???
Marsh Posté le 20-02-2007 à 16:31:52
Ba parce que je ne sais pas jusqu'où ça va.
je peux arriver à $data->{regleracine}->{warning}->{regle}->{warning}->{regle}->{warning}->{regle}->{warning}->{regle}->{warning}->{regle}->{warning}->{regle}->{warning}->{regle}.
Enfait j'ai utilisé XML::Simple pour récupérer le contenu d'une arborescence d'un fichier xml, dans $data.
Il faut que je parcours toute l'arborescence et à chaque règle qui descend d'une autre règle, il faut que je renvois le nom de la règle (il y a aussi deux cas: alerte ou warning).
Marsh Posté le 20-02-2007 à 16:50:57
Pourquoi tu te fais pas un petit truc recursif qui parcourerait ta hash?
Par ailleurs je te conseillerais d'acheter du goudron et des plumes pour gentillement en enduire la personne qui a pensé la structure du flux xml qui tu as l'air de devoir utilisé!
Marsh Posté le 20-02-2007 à 17:05:53
HAHA
Devine qui a pensé à la structure du fichier xml !
Ba c'est moi !
J'ai créé un fichier d'exemple:
Citation : |
Quoi vous avez dit indigeste ?
Y a peu être des truc modifiable mais je ne vois pas ce que je pourrais changer à la structure.
Je veux bien faire un truc récursif mais je ne sais pas comment lol.
Marsh Posté le 20-02-2007 à 17:52:28
Ok j'imagine que ta structure décrit la liste des vérifications de règles, règles composées de sous-règles pouvant elles-même être composée de sous-sous-règles et ainsi de suite; Chaque règle pouvant remonter une alerte ( mot français) ou un warning (mot anglais, c'est bien uniforme ) .
Par contre aucun de des noeuds n'a de valeur s'normal?
Après pour le récursif, l'idée c'est grosso modo de faire une fonction qui prend une hash en paramètre et regarde si elle a une clé que tu cherches si oui tu rappeles cette même fonction avec la "sous-hash" qui est la valeur de la clé recherchée.
2/3 recherches devraient te permettre de trouver rapidement des exemples
note: oui je pourrais te filer un code tout fait, il y en a pour 2 secs mais cela perdrait de son interêt pédagogique.
Marsh Posté le 20-02-2007 à 20:24:19
Ok merci.
Mais pour répondre: non tu ne pourrais pas me donner un code tt fait car tu ne sais pas ce que je veux faire .
C'est plus compliqué que les quelques informations que j'ai donné.
Pour les alerte et warning, j'avais pas le choix c'est comme ça.
sub Parcourt($arbo)
{
if ($arbo ne undef)
{
.............
.............
$arbo .= '{alerte}->{regle}';
$v = eval $arbo;
Parcourt($v);
}
}
Bon pour la syntaxe perl je ne maitrise pas encore mais ça devrait ressembler à ça.
Sinon c'est ça l'idée pour le récursif ? En gérant les cas alerte ou warning biensur.
Par contre une fois qu'on est arrivé à la fin de l'arbre (qd $arbo est null), comment on fait pour remonter d'un cran dans l'arborescence?
Marsh Posté le 21-02-2007 à 09:51:35
c'est bien ça!
Mais pourquoi tu veux remonter? En l'occurence c'est l'execution de la fonction va continuer, donc si tu mets quelque chose après l'appel à Parcourt dans ta fonction Parcout, il sera executé dès la fin de Parcourt.
Ptain je suis super pas clair
Marsh Posté le 21-02-2007 à 16:49:14
Ok merci, c'est bon j'ai résolu mon problème.
Par contre, il y a quelque chose que je voudrais faire :
Enfait il va y avoir un répertorie contenant plusieurs fichiers xml, comme celui que j'ai montré.
J'aimerais ouvrir le répertoire, le parcourir et tanque qu'il y a des fichier, ouvir le premier fichier, faire $xml = new XML::Simple; $data = $xml->XMLin("nomfichier.xml" );
Puis retourner dans la boucle, ouvrir le deuxième fichier et refaire $xml = new XML::Simple; $data = $xml->XMLin("nomfichier.xml" );
Et ainsi de suite, sans connaître d'avance le nom des fichiers à ouvrir bien sûr.
Marsh Posté le 22-02-2007 à 18:10:33
oui enfin la lecture d'un repertoire c'est :
* soit les bases
* soit 30 secondes pour trouver dans la doc hein
=> opendir/readdir
A noter que tu peux aussi trouver des modules sur la cpan qui font ça très bien avec plein d'options en plus
Marsh Posté le 20-02-2007 à 15:54:11
Bonjour,
je voudrais faire un truc du genre
on a par exemple $x = 2;
si je fais :
$y = '$x';
un print $y; affichera $x
ensuite je vourdais arriver à récupérer la valeur 2 en utilisant $y, quelqu'un saurrait comment faire svp ?
Vous allez me demander pourquoi je veux faire ça.
C'est un peu compliqué à expliquer.
J'ai une certaine variable et il faudrait que je concatène le nom de cette variable avec une chaine, puis évaluer le résultat.
Enfait j'ai un truc du genre:
$v = '$data->{regleracine}->{warning}->{regle}';
$v = $v . '->{warning}->{regle}';
ensuite il faudrait que je puisse évaluer la valeur de $data->{regleracine}->{warning}->{regle}->{warning}->{regle}.
Je fais cette concaténation car je dois ajouter ->{warning}->{regle} à chaque fois et vérifier si c'est null ou si on peut encore continuer.
Donc à la fin on peut se retrouver avec n * ->{warning}->{regle}.
Je ne suis pas sûr d'avoir été clair mais ma question revient à savoir comment récupérer la valeur de $x avec $y, si $y = '$x'.
PS: Je suis débutant en programmation