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

Shell et commandes GNU Discussion :

Création d'un tableau en shell à partir d'un string


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Création d'un tableau en shell à partir d'un string
    Bonjour à toutes et à tous,

    Dans le cadre d'un script shell sous RedHat 5.5 64 bits, je souhaite créer un tableau avec des sous-string d'une variable créée plus tot dans le script. L'exemple ci dessous expose ce que je souhaite :

    string1|string2|...|stringn -> TAB[0]=string1, TAB[1]=string2 ..........

    J'ai essayé la commande "set -A" qui ne fonctionne pas sous RedHat......

    Je vous remercie de votre aide

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Et comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ echo $A
    string1|string2|string3|stringn
    
    $ OIFS=$IFS;IFS="|";B=( $A );IFS=$OIFS
    
    $ echo ${B[0]}
    string1
    
    $ echo ${B[2]}
    string3
    
    $

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Je viens de faire un petit test, ça a l'air de marcher très bien!
    Pour ma culture :

    je sais ce qu'est IFS, le séparateur, dans mon cas "|" mais à quoi correspond "OIFS"?

    merci de ton aide

  4. #4
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par jimmy4413 Voir le message
    je sais ce qu'est IFS, le separateur, dans mon cas "|" mais à quoi correspond "OIFS"?

    merci de ton aide
    En fait OIFS (par convention Old_Input_Field_Separator) ne sert qu'à sauvegarder l'ancienne variable "$IFS" et ne pas avoir à la récrire par la suite...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 586
    Points : 19 469
    Points
    19 469
    Par défaut
    Bonjour,

    quel shell ?
    une variable intermédiaire est-elle vraiment nécessaire ?

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string="foo foo|bar bar|baz baz"
    IFS='|' read -a array <<<"$string"
    printf '%s\n' "${array[@]}"
    foo foo
    bar bar
    baz baz
    ici, on ne modifie l'IFS que pour la commande read.

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut,

    @N_BaH : merci de ta réponse, mais le separateur | m'est imposé car je recupere les variables d'un fichier texte normé sur lequel je n'ai pas la main......sinon c'est GNU Bash 3.1.17!! (au passage j'aime le jeu de mot foo bar.....)

    @Zipe31 : je vois.....merci de ton explication!!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 586
    Points : 19 469
    Points
    19 469
    Par défaut
    Citation Envoyé par jimmy4413
    le separateur | m'est imposé car je recupere les variables d'un fichier texte normé sur lequel je n'ai pas la main
    en admettant que le fichier soit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1|foo foo|bar bar|baz baz
    2|foo foo|bar bar|baz baz
    3|foo foo|bar bar|baz baz
    une variable intermédiaire apporte quoi ? lis directement dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while IFS='|' read -a array; do echo "${array[0]}"; done < fichier
    1
    2
    3

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    interessant ton code, je vais l'implanter et voir ce que cela donne.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/10/2014, 12h17
  2. Réponses: 13
    Dernier message: 23/07/2013, 09h07
  3. Réponses: 1
    Dernier message: 02/08/2011, 19h21
  4. Création d'un tableau word vierge à partir d'excel
    Par johan3240 dans le forum Excel
    Réponses: 3
    Dernier message: 07/07/2009, 11h20
  5. Création d'un tableau a partir d'un autre
    Par ChrisMaire dans le forum ASP
    Réponses: 0
    Dernier message: 26/08/2008, 20h37

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