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

  FORUM HardWare.fr
  Programmation
  Perl

  problème d'if

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème d'if

n°1471778
Yagmoth
Fanboy
Posté le 07-11-2006 à 18:55:01  profilanswer
 

Alors j'ai un petit souci... Grosso modo j'ai des liste du genre S(SN(DET,ADJ,NOM),SV(V)), le but étant de présenter les listes avec un retrait correspondant à l'imbrication. Donc aucun souci pour décomposer en fonction des parenthèses et virgules, mais j'ai un petit soucis à la fin pour définir le retrait... Je vous montre le code :
 

Code :
  1. for ($x=0;$x<$#tab;$x++) {
  2. for ($i=0;$i<$retrait;$i++) {print ' ';}
  3. $plop=chop(@tab[$x]);
  4. if($plop == "," ) {print "$plop virgule \n";}
  5. if($plop == "(" ) {$retrait=$retrait+5; }
  6. if($plop == ')') {$retrait=$retrait-5;}
  7. }


 
Si je demande d'afficher le tableau préalablement, j'ai un tableau correctement décomposé ([0]-> S( [1]->SN( [3]-> DET, etc.). Et donc j'essaie de vérifier le dernier caractère de chaque élément du tableau, pour vérifier s'il y a lieu d'augmenter ou de réduire le retrait. Or voilà le résultat :
 

Code :
  1. ( virgule
  2. ( virgule
  3. , virgule
  4. , virgule
  5. ) virgule
  6. , virgule
  7. ( virgule


 
 
Donc il vérifie la première condition à chaque fois (et après test c'est la même chose avec les deux autres conditions). Donc si quelqu'un peut me dire où j'ai fait une erreur, je lui en serai reconnaissant.


Message édité par Yagmoth le 07-11-2006 à 18:55:44
mood
Publicité
Posté le 07-11-2006 à 18:55:01  profilanswer
 

n°1471780
anapajari
s/travail/glanding on hfr/gs;
Posté le 07-11-2006 à 19:03:07  profilanswer
 

l'opérateur de comparaison de chaine en perl c'est "eq" et non "=="
 
Mais par ailleurs, il me semble que tu te compliques bien la vie et qu'une petite fonction récursive aurrait fait ça très bien... Voir même un coup de Dumper!

n°1471786
Yagmoth
Fanboy
Posté le 07-11-2006 à 19:22:04  profilanswer
 

quelle andouille :D
 
Merci bien ;) Est ce que tu pourrais m'expliquer grosso modo ce qu'est une fonction récursive ? (je débute en perl, donc je ne connait pas trop les fonctions de référence pour le moment...).

n°1472034
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-11-2006 à 09:40:05  profilanswer
 

C'est pas vraiment spécifique à perl, la récursivité. C'est "un concept" algorithmique.  
Definition de wikipedia:

Citation :

une fonction récursive est une fonction, au sens informatique de ce terme, qui peut s'appeler elle-même au cours de son exécution.


C'est généralement très utilisé dans les parcours de tableaux( de tableaux de tableaux) ou d'arbre.
 
Pour ton truc ( si j'ai tout bien compris ce que tu veux), en gros ça donnerait un truc comme ça:

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. my @example = (
  4.     1,
  5.     ['1.1','1.2','1.3',['1.3.1','1.3.2','1.3.3']],
  6.     2,
  7.     ['2.1',['2.1.1','2.1.2','2.1.3'],'2.2'],
  8.     3,
  9.     ['3.1',['3.1.1','3.1.2'],'3.2',['3.2.1','3.2.2']]
  10. );
  11. printArray(\@example);
  12. sub printArray {
  13.   my $prm = shift;
  14.   my $inc = shift||'';
  15.   if ( ref $prm eq 'ARRAY'){
  16.     foreach(@$prm){
  17.       printArray($_,$inc."  " );
  18.     }
  19.   } elsif ( ref $prm ne 'HASH'){
  20.     print $inc.$prm,"\n";
  21.   }
  22. }

n°1472132
Yagmoth
Fanboy
Posté le 08-11-2006 à 12:22:26  profilanswer
 

Merci bien je vais jeter un oeil la dessus dès que j'en aurai le temps ;)


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

  problème d'if

 

Sujets relatifs
[C++ OpenGL] probleme avec les callback du glutess[resolu] Probleme passage iframe --> include
Problème de logique objetProbleme avec fonction left() en vba
probleme upload certains types de fichiers (mp3, guitarpro)Problème de syntaxe ???
probléme de select sous FFQuestion sur une manière de modéliser mon problème
Probleme cookies[xHtml/CSS]Petit probleme validateur W3C
Plus de sujets relatifs à : problème d'if


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR