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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Simplifier une boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Simplifier une boucle

n°1889020
Tonio94
Posté le 28-05-2009 à 15:17:26  profilanswer
 

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 !

mood
Publicité
Posté le 28-05-2009 à 15:17:26  profilanswer
 

n°1889112
olivthill
Posté le 28-05-2009 à 18:04:37  profilanswer
 

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


n°1889830
Sve@r
Posté le 30-05-2009 à 20:48:01  profilanswer
 

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.
n°1890826
Tonio94
Posté le 03-06-2009 à 13:41:16  profilanswer
 

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
n°1891509
matafan
Posté le 05-06-2009 à 09:34:04  profilanswer
 

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

n°1891607
Tonio94
Posté le 05-06-2009 à 11:49:29  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Simplifier une boucle

 

Sujets relatifs
Mise en forme d'une boucle while()Bug sur Boucle for sur une ligne et sur un test supérieur à
pb pour fermer une boucle (calculatrice)Boucle For & If Imbriqués
Problème d'affichage double boucle (mysql_fetch_array)problème boucle while
Fonction récursive de parcours d'un arbre xml qui boucle indéfinimentmettre une animation en boucle sur psp
boucle sur colonnepeut simplifier cette boucle
Plus de sujets relatifs à : Simplifier une boucle


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