IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Comment itérer les éléments d'une séquence ? [FAQ]


Sujet :

Contribuez

  1. #1
    Invité
    Invité(e)
    Par défaut Comment itérer les éléments d'une séquence ?
    Question : Comment itérer les éléments d'une séquence ?

    bof bof... le titre n'est peut-être pas assez évocateur.

    Réponse:
    On pourrait obtenir le même résultat, que celui que présentent les exemples qui suivent, de cette façon :
    à ce simple cas, on peut opposé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf '%d\n' {4..8}
    # cf. man bash /Développement des accolades
    Au sein d'une boucle for, on va pouvoir itérer sur chacune des valeurs de cette séquence.
    Assigner chacune, lors de chaque boucle, à une même variable, qui sera écrasée par la valeur suivante lors de la prochaine boucle.
    Cette variable est alors disponible pour toutes les commandes à l'intérieur de la boucle `for`.

    Vous pourriez aussi bien faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in 4 5 6 7 8
    do echo $i
    done
    mais, parfois, la séquence peut être très longue, ou alors, on peut ne pas connaître à l'avance les bornes de la séquence.

    avec des "constantes" numériques (on connaît les bornes inférieures et supérieures de la séquence) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in {4..8}
    do echo $i
    done
    on peut avoir plusieurs intervalles (¿séquence discontinue?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in {4..8} {11..14}
    do echo $i
    done
    avec bash4, il est possible de définir le pas (c'est-à-dire, la différence entre deux nombres de la séquence) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in {4..14..3}
    do echo $i
    done
    mais, ça se complique si on veut utiliser des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var=$1 #premier paramètre positionnel que l'on a préalablement testé, et dont on certain que c'est un nombre.
    debut=$((var+2))
    fin=$((debut+4))
    il faudrait utiliser `eval` :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in $(eval echo {$debut..$fin})
    do echo $i
    done
    il est alors possible d'utiliser une boucle for dans le style C (C-style for loop) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (( i=debut ; i < fin ; i++ ))
    do echo $i
    done
    de la même manière que précédemment (sans bash4 installé), il est possible de régler le pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fin=14
    for (( i=debut ; i < fin ; i+=3 ))
    do echo $i
    done
    vous remarquerez, que je n'ai pas ajouter de signe dollar devant les bornes de l'intervalle (ce n'est pas une coquille),
    au sein des évaluations arithmétiques (entre `((` et `))`), le $ n'est pas nécessaire.


    Par contre, cette dernière forme ne peut rien pour des variables alphabétiques :
    il faut en repasser par `eval` (cf. supra)

    Si vous n'utilisez pas GNU/Linux, ou si votre shell n'accepte pas ces commandes,
    il vous faudra vous assurer que vous disposez d'un programme qui générera la séquence de nombres, ou de lettres, souhaitée.
    Soit, une de ces commandes :
    - seq : disponible dans GNU coreutils (seq2 sur BSD)
    - gseq
    - jot
    voyez : Comment faire une boucle sur une indice ?
    Dernière modification par Invité ; 19/06/2010 à 09h57.

Discussions similaires

  1. [XMLUnit] Comment vérifier que tous les éléments d'une séquence sont présents
    Par Fifan31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/05/2013, 15h30
  2. Comment afficher les éléments d'une combobox
    Par dark_botsay dans le forum C#
    Réponses: 2
    Dernier message: 13/09/2010, 16h10
  3. Réponses: 3
    Dernier message: 18/03/2008, 21h55
  4. Comment récupèrer les éléments d'une JList
    Par Orian dans le forum Composants
    Réponses: 13
    Dernier message: 10/09/2006, 11h53
  5. Réponses: 3
    Dernier message: 15/05/2006, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo