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 vérifier si une valeur est incluse dans un tableau [FAQ]


Sujet :

Contribuez

  1. #1
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut Comment vérifier si une valeur est incluse dans un tableau
    Bonjour, une autre proposition pour la FAQ :

    Pour les versions de bash inférieures à la version 4 (/bin/bash --version), les tableaux sont relativement difficilement manipulables.

    Si l'on souhaite savoir si une valeur (needle) est incluse dans un tableau (array), voila une solution avec un parcours des valeurs du tableau (plus fiable qu'un grep):

    Une solution simple en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #!/bin/bash
    function in_array() {
      local x
      local needle=$1
      shift 1
      local ARRAY=( "$@" )
     
      [ -z "${ARRAY}" ] && return 1
      [ -z "${needle}" ] && return 1
      for x in ${ARRAY[@]}; do
        [ "${x}" == "${needle}" ] && return 0
      done
      return 1
    }
    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tmp_arr=( "1" "11" "12" "13" )
     
    for needle in $(seq 0 14)
    ## alternative bourne: for needle in {1..14}
    do
       in_array "${needle}" "${tmp_arr[@]}"
       RET=$?
       [ "${RET}" -eq 0 ] && echo "ok : $needle est dans le tableau" || echo "Nok  $needle pas trouvé dans le tableau"
    done
    Nota: à adapter en bourne shell.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    sans avoir poussé les tests très loin, je propose quelques modifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $ function in_array() {
    # définition de variables propres à la fonction et isolées du reste du script
       local x needle="$1"
    # effacement du premier paramètre positionnel
       shift
    # y a-t-il au moins un élément au tableau passé en argument
       if [ -n "$1" ]
    # alors, pour x dans les paramètres positionnels (in "@" est implicite)
       then for x
            do [ "$x" = "$needle" ] && { echo 1; return;}
    # l'évaluation arithmétique retournera vrai
            done
       fi
    #le else est implicite, et si la boucle for va jusqu'au terme de sa liste
       echo 0
    # l'évaluation arithmétique retournera faux
    }
    $ needle=bla Array=(foo bar bla baz)
    $ (( $(in_array $needle "${Array[@]}") )) && echo "$needle est dans \"${Array[@]}\""
    bla est dans "foo bar bla baz"
    $ (( $(in_array autre "${Array[@]}") )) && echo "$needle est dans \"${Array[@]}\""
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Merci , c'est nettement plus synthétique que ma version "simpliste", mais aussi nettement moins lisible par le plus grand nombre (contexte de FAQ avec des lecteurs qui débutent et pas des ultra spécialistes), pour au final, un même résultat me semble-t-il. Ou bien ai-je commis une boulette ?

Discussions similaires

  1. Comment vérifier si une variable est contenu dans un tableau ?
    Par larffas68 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 06/01/2011, 00h17
  2. Vérifier si une valeur est dans un tableau croisé dynamique
    Par psykodumarteau dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/07/2008, 14h39
  3. Réponses: 11
    Dernier message: 16/12/2007, 17h33
  4. Comment vérifier qu'une valeur est NULL ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2006, 15h53
  5. Réponses: 2
    Dernier message: 17/08/2005, 15h40

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