Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1327 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Petit soucis

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit soucis

n°1517117
MaT77
Posté le 20-02-2007 à 15:54:11  profilanswer
 

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  :)

mood
Publicité
Posté le 20-02-2007 à 15:54:11  profilanswer
 

n°1517122
anapajari
s/travail/glanding on hfr/gs;
Posté le 20-02-2007 à 16:02:45  profilanswer
 

http://perl.enstimac.fr/DocFr/perlfunc.html#item_eval
 
Mais ça sent pas bon ce que tu essaye de faire [:pingouino]
 
Pourquoi tu fais pas directement:

Code :
  1. $valeur = $data->{regleracine}->{warning}->{regle}->{warning}->{regle};


???

n°1517129
MaT77
Posté le 20-02-2007 à 16:31:52  profilanswer
 

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).


Message édité par MaT77 le 20-02-2007 à 16:32:18
n°1517144
anapajari
s/travail/glanding on hfr/gs;
Posté le 20-02-2007 à 16:50:57  profilanswer
 

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é!

n°1517150
MaT77
Posté le 20-02-2007 à 17:05:53  profilanswer
 

HAHA
Devine qui a pensé à la structure du fichier xml !
Ba c'est moi !
J'ai créé un fichier d'exemple:
 

Citation :


<regleracine nom="r0">
  <alerte>
    <message>execution des regles r1 et r2</message>  
    <regle nom="r1">
      <alerte>
        <regle nom="r12" />  
      </alerte>
      <warning>
        <regle nom="r13">
          <alerte>
            <regle nom="r20" />  
          </alerte>
        </regle>
      </warning>
    </regle>
    <regle nom="r2">
      <alerte>
        <regle nom="r14" />  
        <regle nom="r30" />  
      </alerte>
      <warning>
        <regle nom="r5">
          <alerte>
            <regle nom="r25" />  
          </alerte>
        </regle>
      </warning>
    </regle>
  </alerte>
  <warning>
    <message>execution de la regle r1</message>  
    <regle nom="r1">
      <alerte>
        <regle nom="r12" />  
      </alerte>
      <warning>
        <regle nom="r7">
          <alerte>
            <regle nom="r40" />  
          </alerte>
        </regle>
      </warning>
    </regle>
  </warning>
</regleracine>


 
Quoi vous avez dit indigeste ?  :D  
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.

n°1517181
anapajari
s/travail/glanding on hfr/gs;
Posté le 20-02-2007 à 17:52:28  profilanswer
 

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 :o) .
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.

n°1517271
MaT77
Posté le 20-02-2007 à 20:24:19  profilanswer
 

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?

n°1517405
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-02-2007 à 09:51:35  profilanswer
 

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 [:pingouino]

n°1517792
MaT77
Posté le 21-02-2007 à 16:49:14  profilanswer
 

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.

n°1518546
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-02-2007 à 18:10:33  profilanswer
 

[:pingouino] 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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Petit soucis

 

Sujets relatifs
Petit soucis pour une newsletterTables croisées et tri, petit soucis
Petit soucis avec strcat[MySQL/PHP] Petit soucis de renommage de fichiers proposés en download
petit soucis requete sql sur deux table ( order spécial :) )Petit soucis de syntaxe SQL... Je paye ma soeur pour une solution!
petit soucis en batch[RESOLU] Petit soucis de cookies
Petit soucis...[SQL] Petit soucis...
Plus de sujets relatifs à : Petit soucis


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR