Simplifier une boucle

Simplifier une boucle - Shell/Batch - Programmation

Marsh Posté le 28-05-2009 à 15:17:26    

Salut,
 
 
Comment en KSH simplifier ce type de structure, pour éviter d'avoir une infinie de "if/elif" ?
 

Code :
  1. if [ $var = "A" ]
  2. then
  3.      var_A=`expr $var_A + 1`
  4. elif [ $var = "B" ]
  5. then
  6.      var_B=`expr $var_B + 1`
  7. elif [ $var = "C" ]
  8. then
  9.      var_C=`expr $var_C + 1`
  10. fi


 
Que j'aurais pu continuer à souhait d'ailleurs.
 
 
Merci d'avance !

Reply

Marsh Posté le 28-05-2009 à 15:17:26   

Reply

Marsh Posté le 28-05-2009 à 18:04:37    

Que veut dire "simplifier" ?
 
S'il s'agit d'un problème d'esthétisme, et que l'on voudrait avoir moins de lignes, ce serait possible en mettant le then derrière le test (mais un point virgule sera nécessaire) :

if [ $var = "A" ]; then
     var_A=`expr $var_A + 1`
elif [ $var = "B" ]; then
     var_B=`expr $var_B + 1`
elif [ $var = "C" ]; then
     var_C=`expr $var_C + 1`
fi

Ou bien, on peut utiliser case esac :

case "$var" in
  A) var_A=`expr $var_A + 1`;;
  B) var_B=`expr $var_B + 1`;;
  C) var_C=`expr $var_C + 1`;;
  *) echo "autre cas";;
esac


Reply

Marsh Posté le 30-05-2009 à 20:48:01    

olivthill a écrit :

S'il s'agit d'un problème d'esthétisme, et que l'on voudrait avoir moins de lignes, ce serait possible en mettant le then derrière le test (mais un point virgule sera nécessaire) :

if [ $var = "A" ]; then
     var_A=`expr $var_A + 1`
elif [ $var = "B" ]; then
     var_B=`expr $var_B + 1`
elif [ $var = "C" ]; then
     var_C=`expr $var_C + 1`
fi



 

[ $var = "A" ] && var_A=`expr $var_A + 1`
[ $var = "B" ] && var_B=`expr $var_B + 1`
[ $var = "C" ] && var_C=`expr $var_C + 1`


 
Sinon il y a eval. C'est absolument illisible (surtout si tu reviens dans ton code 6 mois après) mais ça fonctionne

var=A
var_A=1
...
eval var_$var=\`expr \$var_$var + 1\`
 
echo $var_A    # 2


 

Tonio94 a écrit :

Comment en KSH simplifier ce type de structure, pour éviter d'avoir une infinie de "if/elif" ?


 
Ton titre marque "comment simplifier une boucle". Ferais-tu par hasard partie de ces programmeurs débiles qui parlent de la "boucle if" ???

Message cité 1 fois
Message édité par Sve@r le 30-05-2009 à 21:12:31

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-06-2009 à 13:41:16    

Sve@r a écrit :

 

[ $var = "A" ] && var_A=`expr $var_A + 1`
[ $var = "B" ] && var_B=`expr $var_B + 1`
[ $var = "C" ] && var_C=`expr $var_C + 1`

 

Sinon il y a eval. C'est absolument illisible (surtout si tu reviens dans ton code 6 mois après) mais ça fonctionne

var=A
var_A=1
...
eval var_$var=\`expr \$var_$var + 1\`

 

echo $var_A    # 2

 


 


Ça me plait bien ça merci :)

 

En fait à la base je cherchais plus une méthode dans le genre tableau de pointeurs en C ou structures, pour éviter d'avoir 20 lignes de "if/elif" mais je me doute bien qu'en shell ça risque d'être difficile de trouver un équivalent !

 


Sve@r a écrit :

 

Ton titre marque "comment simplifier une boucle". Ferais-tu par hasard partie de ces programmeurs débiles qui parlent de la "boucle if" ???

 


Là pas compris par contre, tu veux dire quoi ?

Message cité 1 fois
Message édité par Tonio94 le 03-06-2009 à 13:48:23
Reply

Marsh Posté le 05-06-2009 à 09:34:04    

Tonio94 a écrit :

Là pas compris par contre, tu veux dire quoi ?


Un "if" n'est pas une boucle. Une boucle c'est un while, un for ...

Reply

Marsh Posté le 05-06-2009 à 11:49:29    

Je sais bien qu'un if n'est pas une boucle, mais pour une grande partie des gens c'est plus explicite que de dire "simplifier une structure de contrôle".
 
Voila tout :)

Reply

Sujets relatifs:

Leave a Replay

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