Traitement chaine de caractère

Fermé
simo - 20 févr. 2008 à 09:28
 simo - 20 févr. 2008 à 12:34
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

quel language utilises tu??

si php un

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

ch=

if [ -z $ch ]
then
echo "chain vide"
else
echo "chaine pleine"
fi
0
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 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
20 févr. 2008 à 10:36
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 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 20 février 2008 1
20 févr. 2008 à 10:38
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
20 févr. 2008 à 10:49
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
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 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
20 févr. 2008 à 10:55
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
et avec un if??
tu peux m'expliquer d'avantage?
0
nhien Messages postés 14 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 20 février 2008 1
20 févr. 2008 à 11:03
#!bin/ksh

x1=
x2=
ch=$x1$x2

if [ -z $ch ]
then
echo "chaine plein"
else
echo "chaine vide"
fi
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
20 févr. 2008 à 11:05
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
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 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 20 février 2008 1
20 févr. 2008 à 11:36
chaine1=
ch=$chaine1
0
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
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