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?
A voir également:

17 réponses

pouet
 
quel language utilises tu??

si php un

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

ch=
echo $ch

Quand je dis une ligne je veux dire rien, c'est vide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
pouet
 
#!bin/ksh

ch=

if [ -z $ch ]
then
echo "chain vide"
else
echo "chaine pleine"
fi
0
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
asevere Messages postés 13521 Statut Webmaster 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
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
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
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
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
asevere Messages postés 13521 Statut Webmaster 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
simo
 
et avec un if??
tu peux m'expliquer d'avantage?
0
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
asevere Messages postés 13521 Statut Webmaster 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
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
nhien Messages postés 14 Statut Membre 1
 
chaine1=
ch=$chaine1
0
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
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