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 :

Extraire une chaine derrière un caractère défini


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut Extraire une chaine derrière un caractère défini
    Bonjour à tous

    Je suis relativement mauvais en programmation et je ne sais trop comment m'y prendre pour réaliser ce que l'on me demande...

    Je dispose d'une variable qui contient une chaine de type :

    INDEX_NAME ------------------------------ TABLE~1 TABLE~2 TABLE~3 TABLE~4

    (il s'agit en fait de la liste index compris dans une TABLE oracle)

    Je dois faire en sorte de mettre chacun des "TABLE~X" dans une variable séparée sachant que :
    -TABLE est toujours la même chaine MAIS mon script doit être adaptable à d'autres TABLES, la longueur de cette chaine est donc variable.
    -Le nombre ~X peut aller de 1 à .... beaucoup

    J'ai remarqué qu'il y avait un espace devant chacune des valeurs, cela pourrait éventuellement être exploité, si ce n'est qu'il me ressortira également ------------------------------ puisqu'il est précédé d'un espace, il faudra donc ne pas le prendre en compte.

    Le seul caractère réellement intéressant est ~ car il sera toujours présent, ceci dit je ne connais pas la longueur des chaines qui le précèdent et le succèdent...

    Je ne sais trop comment me défaire de ce bourbier !

    Merci d'avance pour votre aide

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

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

    Je dispose d'une variable qui contient une chaine de type :

    INDEX_NAME ------------------------------ TABLE~1 TABLE~2 TABLE~3 TABLE~4
    Comment l'obtiens-tu ?

    Je dois faire en sorte de mettre chacun des "TABLE~X" dans une variable séparée
    pour quoi faire ?

    quel shell ?
    Si tu peux utiliser autre chose qu'un shell strictement POSIX, il est probablement possible d'utiliser un tableau.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par shanod Voir le message
    Bonjour à tous

    Je suis relativement mauvais en programmation et je ne sais trop comment m'y prendre pour réaliser ce que l'on me demande...

    Je dispose d'une variable qui contient une chaine de type :

    INDEX_NAME ------------------------------ TABLE~1 TABLE~2 TABLE~3 TABLE~4

    (il s'agit en fait de la liste index compris dans une TABLE oracle)

    Je dois faire en sorte de mettre chacun des "TABLE~X" dans une variable séparée sachant que :
    -TABLE est toujours la même chaine MAIS mon script doit être adaptable à d'autres TABLES, la longueur de cette chaine est donc variable.
    -Le nombre ~X peut aller de 1 à .... beaucoup

    J'ai remarqué qu'il y avait un espace devant chacune des valeurs, cela pourrait éventuellement être exploité, si ce n'est qu'il me ressortira également ------------------------------ puisqu'il est précédé d'un espace, il faudra donc ne pas le prendre en compte.

    Le seul caractère réellement intéressant est ~ car il sera toujours présent, ceci dit je ne connais pas la longueur des chaines qui le précèdent et le succèdent...

    Je ne sais trop comment me défaire de ce bourbier !

    Merci d'avance pour votre aide
    Bonjour

    T'es obligé de faire ça en shell ? Parce qu'il y a des langages de scripts bien plus puissants.

    Par exemple en Python

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> chaine="INDEX_NAME ------------------------------ TABLE~1 TABLE~2 TABLE~3 TABLE~4"
     
    >>> table=[x for x in chaine.split(" ") if x.startswith("TABLE")]
     
    >>> table
    ['TABLE~1', 'TABLE~2', 'TABLE~3', 'TABLE~4']
     
    >>> table[2]
    'TABLE~3'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Merci pour vos réponses

    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    Comment l'obtiens-tu ?

    pour quoi faire ?

    quel shell ?
    Si tu peux utiliser autre chose qu'un shell strictement POSIX, il est probablement possible d'utiliser un tableau.
    J'obtiens cette chaine par une requête SQL qui me renvoie tous les index existant pour une table Oracle spécifiée.

    Car je dois réorganiser la table en question ainsi que tous ses index (et ceci doit être dynamique donc le nom de ma table ainsi que le nom de tous les index doit être variabilisé.)

    J'utilise du KSH et je suis contraint d'utiliser ce langage.

    Après différents tests, je remarque que le début de ma chaine :
    INDEX_NAME ------------------------------
    est de longueur fixe, je peux donc sans problème la faire sauter.
    Je me retrouverai alors avec :
    TABLE~1 TABLE~2 TABLE~3 TABLE~4...
    qui doivent aller se caler dans autant de variables que de "TABLE~X"

    Je dispose d'une requête qui me compte le nombre d'index donc je peux savoir jusqu'à quel nombre va mon X.

    Serait-il possible de remplacer chaque espace par un saut de ligne et ensuite lire chaque ligne de ma variable (je ne veux pas passer par un fichier).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Ça tombe bien, ksh supporte les tableaux !

    on peut essayer :
    Code pour alimenter le tableau : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typeset -a tableau
    ta_requeteSQL | while read line; do tableau+=( "$line" ); done
    Code pour visualiser le tableau sans headers : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' "${tableau[@]:2}"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    N_BaH fait une erreur, c'est suffisament rare pour être repéré :
    on ne dit pas tanbleau mais tableau

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par shanod Voir le message
    Je me retrouverai alors avec :
    TABLE~1 TABLE~2 TABLE~3 TABLE~4...
    qui doivent aller se caler dans autant de variables que de "TABLE~X"

    Je dispose d'une requête qui me compte le nombre d'index donc je peux savoir jusqu'à quel nombre va mon X.

    Serait-il possible de remplacer chaque espace par un saut de ligne et ensuite lire chaque ligne de ma variable
    Pas la peine
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in TABLE~1 TABLE~2 TABLE~3 TABLE~4...
    do
        echo "$i"
    done

    ou bien
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set TABLE~1 TABLE~2 TABLE~3 TABLE~4...
    echo "$#"     => nombre de "TABLE~X"
    for i in $*
    do
        echo "$i"
    done

    Citation Envoyé par shanod Voir le message
    (je ne veux pas passer par un fichier).
    Et tu as bien raison. Quand on peut éviter...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Extraire une chaine entre 2 caractères identiques
    Par nicomax34 dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2014, 10h39
  2. extraire une chaine de caractères
    Par Stéph utilisateur d'acces dans le forum Excel
    Réponses: 6
    Dernier message: 06/03/2009, 13h15
  3. Extraire une chaine de caractères
    Par Sam_Dalembert dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/08/2008, 11h58
  4. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 17h21
  5. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39

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