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

Linux Discussion :

[cshell] extraction de sous-chaine


Sujet :

Linux

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut [cshell] extraction de sous-chaine
    Bonjour à tous,

    J'ai un probleme pour comparer 2 chaines de caracteres entre elles en Cshell.
    mettons que j'ai une variable $type:
    set type="num_XX_ff"
    J'aimerai dans un if, verifier si XX = "12" (ceci est un exemple).
    mon probleme est donc de savoir comment extraire la chaine "XX" de $type.

    Si l'un de vous à une solution, je lui serai trés reconnaissant.
    Bonne journée.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Oui tu peux utiliser cut pour faire ca.

    Par exemple pour creer une variable $XX qui aura la valeur que tu veux :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    % set type="num_XX_ff"
    % echo $type
    num_XX_ff
    % set XX=`echo $type | cut -d _ -f 2`
    % echo $XX
    XX
    %
    Un autre exemple pour etre sur que tu ne te meprenne pas ($XX vaut XX peut etre confondant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    % set type="num_56_ff"
    % echo $type
    num_56_ff
    % set XX=`echo $type | cut -d _ -f 2`
    % echo $XX
    56
    Il ne te reste plus qu'a faire ton test sur la valeur de $XX et le tour est joue.

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut thanks
    merci andr386.
    c'est encore mieux que ce que je voulais au départ puisque ca découpe ma chaine de caractere avec le caractere "_". Ca me permettra de faire des champs de taille différente.

    Merci à toi.
    ++

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Je t'en prie, c'etait l'occasion d'installer csh.

    Sinon si tu veux il y a une solution encore plus souple avec bash permettant d'exporter plusieurs elements en une fois avec awk, mais dans mon environement de predilection (bash), mais facilement adaptable a csh j'imagine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $type=num_56_ff
    $`echo $type |  awk  ' BEGIN{FS="_"} { print "export a="$1" export b="$2" export c="$3 } '`
    $ echo $b
    56
    $ echo $c
    ff
    $ echo $a
    num
    peut-etre qu'en csh il faudrait taper export set ... je ne sais pas.

  5. #5
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut
    Re,
    un probleme ne venant jamais seul en Cshell,
    je viens de me rendre compte que la solution que tu m'as proposé soulevait un autre probleme.
    voila mon prog (simplifié bien sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #differents type:
    set type1 = "num_XX_ff"
    set type2 = "num_YY_gg"
    ...
    set liste_type= ( 1 2 ....)
    foreach type ($liste_type)
     
    set XX = `echo $type | cut -d _ -f 2`
     
    end
    malheureusement $type contient "1" ou "2" comment faire pour obtenir la valuer contenu dans type1 (soit "num_XX_ff") à partir de $type.

    si je fait
    set type_courant = `echo "type_$type"
    echo "type_courant" me donne "type1"

    donc derriere j'aurais voulu faire quelquechose du genre:

    set XX = `echo $($type_courant) | cut -d _ -f 2`

    Soit obtenir la valeur de la variable dont le nom est contenu dans type_courant.
    Je ne sais pas si je me fait bien comprendre.

    n'hesitez pas a me poser des questions si vous ne trouvez pas mon message clair.
    Merci pour votre patience

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut
    Pas d'idée ou il faut que je crée un nouveau sujet??
    bon app

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    utilise un tableau pour les types ou cree le nom de la variable dynamiquement.

  8. #8
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut
    comment es ce que je peux creer le nom de la variable dynamiquement?

    c'est justement ce que j'essaie de faire, en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    set type1 = "num_XX_ff"
    set numtype = 1
    set type_courant = `echo "type$numtype"
    echo $type_courant me donne "type1", alors que je voudrai "num_XX_ff"

    qu'en penses tu?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    ... mmmh... j'en pense que c'est du Cshell et que la syntaxe detaille du Cshell permettant
    de faire cela m'echappe completement etant donne que j'utilise quasi exclusivement
    le bash pour ecrire mes scripts. Meme sur des environement ou j'ai le cShell par defaut.

    Dans tout les cas, meme en bash dans une telle situation j'utiliserais un tableau.
    Meme si c'est du scripting shell, creer des nom de variable a la volee n'est pas tres propre.

    A ta place je regarderai en detail qu'elle sont les fonctions permettant d'executer du code dans du code en Cshell. Du type eval , ` ` , $(), .... enfin ce qui existe pour le CShell

    Mais surtout je regarderais comment creer et utiliser un tableau en Cshell, ca te sera surement
    tres utile a l'avenir et resoudrais ton probleme immediatement.

  10. #10
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2006
    Messages : 61
    Points : 64
    Points
    64
    Par défaut
    OK,
    Ben je te remerci d'avoir fait de ton mieux,
    tu m'as bien aidé.
    j'ai cherché un peu une solution pour la poster mais je n'ai pas trouvé.
    J'ai donc fait comme tu m'as connseillé en passant par les tableau.
    Ca marche c'est l'essentiel.

    à un de ces 4 sur le forum.
    ++

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

Discussions similaires

  1. Extraction de sous-chaine
    Par Aicha78 dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 22/12/2008, 18h42
  2. Extraction de sous chaines
    Par benjiprog dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2007, 10h36
  3. Extraction de sous-chaine
    Par yansg dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 02/05/2007, 22h14
  4. Réponses: 7
    Dernier message: 06/09/2006, 15h10
  5. Extraction de sous-chaine dans une chaine
    Par ma2th dans le forum C
    Réponses: 7
    Dernier message: 07/05/2004, 12h42

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