Traitement chaine de caractère

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. quel language utilises tu??

    si php un

    echo $ch ;
    0
    1. Non c'est du korn shell :)
      je voudrai savoir s'il n'existe rien aprés le "="
      0
      1. 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
        1. edit le

          ch=
          echo $ch

          Quand je dis une ligne je veux dire rien, c'est vide
          0
          1. 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
            1. #!bin/ksh

              ch=

              if [ -z $ch ]
              then
              echo "chain vide"
              else
              echo "chaine pleine"
              fi
              0
              1. 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. Webmaster
                  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
              2. 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
                1. Modérateur
                  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
                  1. 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
                    1. Webmaster
                      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
                      1. et avec un if??
                        tu peux m'expliquer d'avantage?
                        0
                        1. #!bin/ksh

                          x1=
                          x2=
                          ch=$x1$x2

                          if [ -z $ch ]
                          then
                          echo "chaine plein"
                          else
                          echo "chaine vide"
                          fi
                          0
                          1. Webmaster
                            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
                            1. 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. chaine1=
                                ch=$chaine1
                                0
                            2. 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
                              1. 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