aide sur script

aide sur script - Perl - Programmation

Marsh Posté le 30-12-2003 à 22:50:58    

bonjour  
j ai un petit script qui va analyse les lignes d un fichier ,
et voici un extrait de ce script  
 
SWITCH : {
if ($curlin =~ /^changetype: delete/ ) {$type=(split(/:/,$curlin))[1];
                             $ok=1;last SWITCH; };
      if ($curlin =~ /^changetype:/ && $lname =~ /uid/ ) { $type=(split(/:/,$curlin))[1];last SWITCH;};
     if ($curlin =~ /^replace: /) { $qq=(split(/:/,$curlin))[1]; last SWITCH; };
      if ($curlin =~ /\"$qq\":/) { $val=(split(/:/,$curlin))[1];$ok=2; last SWITCH; };
$rien=1;
}
je recupere une variable $qq et je teste si la ligne suivant contient cette variable , mais cela ne pas
une idee .  
J espere ne pas etre trop confus  

Reply

Marsh Posté le 30-12-2003 à 22:50:58   

Reply

Marsh Posté le 31-12-2003 à 02:02:47    

deja tu veux le mettre entre balise C/C++ et l'aligné comme il faut?

Reply

Marsh Posté le 31-12-2003 à 11:20:23    

yannvi a écrit :


J espere ne pas etre trop confus


 
heu  :pt1cable: si je te dis que tu es trop confus, tu l'prendras po mal hein ? :heink:  :whistle:  
 
Comme dit Burgergold, édite ton message et place ton extrait de code Perl entre balises C/C++ parce que là, c'est pas évident à capter


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 31-12-2003 à 12:19:04    

Desole j avais fais un copier-coller depuis vi  
Il s agit d un instruction  
    SWITCH:  
    {
      if ($curlin =~ /^dn: uid/) { $lname=(split(/:/,$curlin))[1];
                              $lname=~ s/^\s+//;
                              $lname=(split(/,/,$lname))[0];
                              last SWITCH; };
      if ($curlin =~ /^changetype: delete/ ) { $type=(split(/:/,$curlin))[1];
                             $ok=1;last SWITCH; };
# Si Ajout d un utilisateur ou modification      
       
 if ($curlin =~ /^(changetype: modify)/ && $lname =~ /uid/ ) { $type=(split(/:/,$curlin))[1];last SWITCH;};
 if ($curlin =~ /^replace: /) { $qq=(split(/:/,$curlin))[1]; last SWITCH; };
  if (($curlin =~ /^\$qq\/i && ($qq !~ /^( modif)/) ){ $val=(split(/:/,$curlin))[1];$ok=2;last SWITCH;};
         
       $nothing=1;
       }
 
et le hic se situe la if (($curlin =~ /^\$qq\/i && ($qq !~ /^( modif)/) ) ... c plus clair ? sinon ben vais me debrouiller comme un grand .
Merci

Reply

Marsh Posté le 31-12-2003 à 12:19:54    

remplacer le smiley pas  ":/"

Reply

Marsh Posté le 31-12-2003 à 12:22:11    

yannvi a écrit :

remplacer le smiley pas  ":/"


NON ! Regarde au dessus de la zone de ton texte quand tu l'édites, tu as plusieurs boutons (G pour gras, I pour italique, etc et C/C++)
 
Sélectionne ton extrait de code et clique sur ce bouton C/C++, ça te mettra des balises devant et derrière ton script et ça sera nettement nettement NETTEMENT plus clair pour nos pôvres neu-noeils à nous zotres  :D  ;)


Message édité par Aricoh le 31-12-2003 à 12:22:42

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 31-12-2003 à 13:55:03    

Code :
  1. SWITCH:
  2.     {
  3.       if ($curlin =~ /^dn: uid/) { $lname=(split(/:/,$curlin))[1];
  4.                               $lname=~ s/^\s+//;
  5.                               $lname=(split(/,/,$lname))[0];
  6.                               last SWITCH; };
  7.       if ($curlin =~ /^changetype: delete/ ) { $type=(split(/:/,$curlin))[1];
  8.                              $ok=1;last SWITCH; };
  9. # Si Ajout d un utilisateur ou modification   
  10.      
  11. if ($curlin =~ /^(changetype: modify)/ && $lname =~ /uid/ ) { $type=(split(/:/,$curlin))[1];last SWITCH;};
  12. if ($curlin =~ /^replace: /) { $qq=(split(/:/,$curlin))[1]; last SWITCH; };
  13.   if (($curlin =~ /^$qq/i) && ($qq !~ /^( modif)/) ){ $val=(split(/:/,$curlin))[1];$ok=2;last SWITCH;};
  14.        
  15.        $nothing=1;
  16.        }

Reply

Marsh Posté le 31-12-2003 à 14:10:50    

bon maintenant aligne le :D

Reply

Marsh Posté le 31-12-2003 à 15:17:43    

Code :
  1. SWITCH: {
  2.    if ($curlin =~ /^dn: uid/) {
  3.       $lname=(split(/:/,$curlin))[1];
  4.       $lname=~ s/^\s+//;  
  5.       $lname=(split(/,/,$lname))[0];
  6.       last SWITCH;
  7.    }
  8.    if ($curlin =~ /^changetype: delete/ ) {
  9.       $type=(split /:/,$curlin))[1];
  10.       ok=1;
  11.       last SWITCH;
  12.    }
  13.    # Si Ajout d un utilisateur ou modification     
  14.    if ($curlin =~ /^(changetype: modify)/ && $lname =~ /uid/ ) {
  15.       $type=(split(/:/,$curlin))[1];
  16.       last SWITCH;
  17.    }
  18.    if ($curlin =~ /^replace: /) {
  19.       $qq=(split(/:/,$curlin))[1];
  20.       last SWITCH;
  21.    }
  22.    if (($curlin =~ /^$qq/i) && ($qq !~ /^( modif)/) ) {
  23.       $val=(split(/:/,$curlin))[1];
  24.       $ok=2;
  25.       last SWITCH;
  26.    };
  27.    $nothing=1;
  28. }


 
ca je considère ca comme du code bien aligné
 
les ; après les if jai personnelement javais vu ca
tu utilise bien "my" lorsque tu créé une variable? (use strict; en début de script)


Message édité par burgergold le 31-12-2003 à 15:18:54
Reply

Marsh Posté le 01-01-2004 à 14:09:37    

c'est un peu confu comme truc
 
deja si tu fait des elsif ca t'evitera de faire un last SWITCH à chaque fois (en mettant le $nothing = 1 dans un dernier else)
 


Message édité par pospos le 01-01-2004 à 14:12:18
Reply

Marsh Posté le 01-01-2004 à 14:09:37   

Reply

Marsh Posté le 01-01-2004 à 17:25:54    

pospos a écrit :

c'est un peu confu comme truc
 
deja si tu fait des elsif ca t'evitera de faire un last SWITCH à chaque fois (en mettant le $nothing = 1 dans un dernier else)
 
 


 
bah c comme ca que ca marche le switch en perl :/

Reply

Marsh Posté le 01-01-2004 à 18:33:39    

c'est pas à toi que je disais ca Burgergold!
 
mais dans ce cas un if{}elsif{}...}else{} serait plus approprié
 
pour le switch, ya le fameux Switch.pm de Conway qui est intégré aux distibs d'ActivePerl et qui est vraiment bien:
http://search.cpan.org/~dconway/Switch-2.09/Switch.pm

Reply

Marsh Posté le 01-01-2004 à 18:57:34    

nah je sais que c'est pas à moi que tu dis ca mais histoire de connaissance personnelle, t'est en train de te dire que le switch en perl est inutile et qu'il vaut autant mieux utiliser un if {} elsif{} ?
 
et le switch.pm c bien? jvais allez regarder ca

Reply

Marsh Posté le 01-01-2004 à 19:04:36    

non c'est clair qu'il manque un switch en Perl, mais en tous cas un if elsif c'est toujours mieux que des if qui se suivent et font un last
 
l'avantage du switch c'est que tu le fait sur la meme variable pour toutes les comparaisons, et donc c'est plsu clair que de devoir la remettre dans chaque if. Une autre solution possible c'est de passer implicitement la variable dans $_, en faisant un for par exemple:
 

Code :
  1. for ($variable_a_la_con_de_pute_de_sa_mere) {
  2.   if (/tralala/) {
  3.      print "c'est la fete";
  4.   }
  5.   elsif (/blanc sur rouge/) {
  6.     print "rien ne bouge";
  7.   }
  8.   else {
  9.     print "comprend pas!";
  10.   }
  11. }


 
mais de toutes facons le Swtich de Damien conway est beaucoup plus puissant!

Reply

Marsh Posté le 01-01-2004 à 19:15:55    

switch de damien vient avec la version unix de perl dans le kit de librairie de base?

Reply

Marsh Posté le 01-01-2004 à 21:16:37    

je sais pas trop
il necessite Filter::Simple, quie st inclus à partir de perl 5.8 il me semble
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed