Traitement chaine de caractère

simo -  
 simo -
Bonjour,
j'ai un truc simple, j'ai une chaîne de caractère sui peut être sous deux forme :
ch =
ch = x,y
je voudrai savoir si ch ne contient rien aprés le =
Comment faire?
Configuration: Windows XP
Internet Explorer 7.0

17 réponses

  1. pouet
     
    quel language utilises tu??

    si php un

    echo $ch ;
    0
  2. simo
     
    Non c'est du korn shell :)
    je voudrai savoir s'il n'existe rien aprés le "="
    0
  3. pouet
     
    bon je viens d'installer et de tester.

    si tu fais

    ch=
    echo $ch

    ca te renvois une ligne.

    ch="pop"
    $ch

    ca te renvois
    pop

    si tu fais

    ch=
    ch="pop"
    echo $pop

    ca te renvois

    pop

    ca que tu voulais savoir?
    0
  4. pouet
     
    edit le

    ch=
    echo $ch

    Quand je dis une ligne je veux dire rien, c'est vide
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. simo
     
    Non :( c'est pas ça mon besoin.
    voici l'algrithme :

    ch =
    ch = x,y

    si ch conyient des valeurs (x,y...) alors
    chaine pleine
    sinon
    chaine vide (ne contien rien aprés le "=")
    fin si
    0
  7. pouet
     
    #!bin/ksh

    ch=

    if [ -z $ch ]
    then
    echo "chain vide"
    else
    echo "chaine pleine"
    fi
    0
  8. pouet
     
    desole du double post faut que je pense a creer un compte pour éditer.

    par un contre bizarre si je fais

    x1=
    x2=
    ch=$x1,$x2

    il me sort chaine pleine :s
    0
    1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      par un contre bizarre si je fais

      x1=
      x2=
      ch=$x1,$x2

      il me sort chaine pleine :s


      Est-ce que a tout hasard, echo $ch ne te renverais pas "," ? ;-)
      0
  9. nhien Messages postés 14 Statut Membre 1
     
    re c 'est pouet.
    et en effet ca me renvois ca :p

    je tente d'aider simo mais je découvre en même temps le langage ! A la curiosité :p
    0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    ch=$x1,$x2 contient la virgule donc elle n'est pas vide
    lami20j@debserv:~$ x1=
    lami20j@debserv:~$ x2=
    lami20j@debserv:~$ ch=$x1$x2
    lami20j@debserv:~$ test -z $ch && echo vide
    vide
    lami20j@debserv:~$ x1=
    lami20j@debserv:~$ x2=
    lami20j@debserv:~$ ch=$x1,$x2
    lami20j@debserv:~$ test ! -z $ch && echo pleine
    pleine
    lami20j@debserv:~$

    0
  11. simo
     
    J'ai résolu le problème les amis :
    en fait mon problème c'est une chaine qui contien une chaine :)
    je ne fais le test sur la chaine directement, désolé j'avais oublié de le mentionner
    ch="ch = "
    ou
    ch="ch = x,y"

    solution :
    echo $ch |awk -F"=" '{if ($2=="") {print "vide"} else {print "pleine"} }'

    si vous avez d'autres solutions plus simple n'hésitez pas :)
    et merci encore ;)
    0
  12. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    En plus concis avec les methodes de pouet & Lami:
    test -z ${chaine#ch = } && echo "chaine vide" || echo "chaine pleine"
    :)

    man ksh
    Section: Parameter Expansion
           ${parameter#pattern}
           ${parameter##pattern}
                  If  the  shell  pattern  matches  the  beginning of the value of
                  parameter, then the value of this expansion is the value of  the
                  parameter  with the matched portion deleted; otherwise the value
                  of this parameter is substituted.  In the first form the  small-
                  est  matching  pattern  is  deleted  and  in the second form the
                  largest matching pattern is deleted.  When parameter is @, *, or
                  an array variable with subscript @ or *, the substring operation
                  is applied to each element in turn.
    en gros, ${chaine#ch = } prend la variable $chaine, et efface dedans la partie qui correspond à "ch<espace>=<espace>" on test la longueur de la chaine retournée (est-elle egale a zero) si oui (&&) echo "chaine vide" si non (||) echo "chaine pleine"

    0
  13. simo
     
    et avec un if??
    tu peux m'expliquer d'avantage?
    0
  14. nhien Messages postés 14 Statut Membre 1
     
    #!bin/ksh

    x1=
    x2=
    ch=$x1$x2

    if [ -z $ch ]
    then
    echo "chaine plein"
    else
    echo "chaine vide"
    fi
    0
  15. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Avec un if,
    test -z ${chaine#ch = } && echo "chaine vide" || echo "chaine pleine"
    devient
    if [ -z ${chaine#ch = } ]; then
        echo "chaine vide";
    else
        echo "chaine pleine";
    fi;
    Pour les explications, j'ai éditer mon post, est-ce suffisant ?
    0
  16. simo
     
    ch="chaine1 = "

    if test -z ${ch#chaine1 = }
    then
    echo "chaine vide"
    else
    echo "chaine pleine"
    fi

    ça ne marche pas!!
    il me renvoie "chaine pleine?!!"
    0
    1. nhien Messages postés 14 Statut Membre 1
       
      chaine1=
      ch=$chaine1
      0
  17. simo
     
    Je veuw ça en shell :

    ch="ch = "
    ou
    ch="ch = x,y"

    solution :
    echo $ch |awk -F"=" '{if ($2=="") {print "vide"} else {print "pleine"} }'

    est ce possible?!
    0
  18. simo
     
    C on j'ai trouvé :)

    ch="chaine1 = toto"

    string=`echo $ch |cut -f2- -d=`

    if test -z "$string"
    then
    echo "vide"
    else
    echo "pleine"
    fi
    0