#26 Le 05/03/2009, à 13:37
- AnsuzPeorth
Re : Bash : test d'un caractere
Ce n'est pas suffisant... que fais-tu des signes + et -, de la virgule, quantité et position ?
C'est pourquoi j'ai fourni une ER complète.
J'y avais pas pensé...:)
On avait posté en même temps, sinon je me serais abstenu en voyant ta réponse (après traduction de l'ER, bien sur )
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#27 Le 05/03/2009, à 14:35
- aleph2
Re : Bash : test d'un caractere
Le classique des classiques.
(L'expression proposée par Totor ne valide pas : 1.2e4 ou 123. )
>>> expression = '^[-+]?[0-9]+[.]?[0-9]*([eE][-+]?[0-9]+)?$'
>>> cpat = re.compile(expression)
>>> cpat.match('-12.50e-3').group()
-12.50e-3
>>> cpat.match('-123.').group()
-123.
A noter que la validité "typographique" d'un nombre est une chose, sa validité "numérique" est une toute autre histoire (bien compliquée). Ex.
>>> cpat.match('-00000.000000000000031416e-1234567').group()
-00000.000000000000031416e-1234567
#28 Le 05/03/2009, à 16:39
- cristobal78
Re : Bash : test d'un caractere
1- j'aime bien la remarque de aleph2
"sa validité "numérique" est une toute autre histoire "
et cette question me brulait les doigts et le clavier depuis un bon moment. Je me demandais qui l'aborderait.
Rien ne "permet d'affirmer que 123 est numérique. Dans excel, pardon dans open office calc on peut très bien avoir une cellule qui contient 123 alors que celle ci n'est pas numérique ce que révèle fort efficacement la fonction estnum de Calc.
Finalement je ne me trompais pas trop quand je disais au 15ème post que le sujet n'était pas si simple que ça : au post no 27 l'affaire continue.
2- Je découvre aussi que bash ne reconnait pas les nombres non-entiers.
Donc les propositions des différents ubunteros sur ce fil, efficaces ou non, dès lors qu'elles opèrent sur des chaines de chiffres avec , ou . ne servent qu'à confirmer ou non le caractère numérique de la variable en question et non à démontrer qu'on peut l'utiliser sans crainte dans une opération arithmétique dans la suite du programme.
jai écrit ce petit script pour essayer de comprendre le $? et les opérations arithmétiques :
#!/bin/bash
# additionner une variable var à elle même
#affiche le résultat du code de sortie $? et la somme var+var
var=123
echo $var
var1=$(($var+$var))
echo "code\$?=$? et $var+$var=$var1"
var=123.5
echo $var
var1=$(($var+$var))
echo "code\$?=$? et $var+$var=$var1"
var=123,5
echo $var
var1=$(($var+$var))
echo "code\$?=$? et $var+$var=$var1"
var="toto"
echo $var
var1=$(($var+$var))
echo "code\$?=$? et $var+$var=$var1"
dont le résultat est :
123
code$?=0 et 123+123=246
123.5
/home/jcc/mes_scripts/bbb: line 11: 123.5+123.5: erreur de syntaxe : opérateur arithmétique non valable (error token is ".5+123.5")
code$?=1 et 123.5+123.5=246
123,5
code$?=0 et 123,5+123,5=5
toto
code$?=0 et toto+toto=0
Pourquoi 123,5+123,5 donne-t-il 5 ?
Ou bien 123,5 est considéré malgré tout comme numérique et alors on devrait avoir le même résultat qu'avec 123.5+123.5 =246 (on fait l'addition des parties entières)
Ou bien 123,5 est purement alpha et alors on devrait avoir 123,5+123,5=0 comme dans le dernier cas avec toto qui n'est -c'est sur- pas numérique.
Mais que la somme donne 5 alors là je ne pige pas !??????????????
Pas simple à comprendre le script bash.
a+
Dernière modification par cristobal78 (Le 05/03/2009, à 16:41)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#29 Le 05/03/2009, à 19:41
- Totor
Re : Bash : test d'un caractere
2- Je découvre aussi que bash ne reconnait pas les nombres non-entiers.
Le bash n'est pas fait pour faire des calculs poussés. Des outils tel que [b]bc[/bc] sont là pour cela.
"sa validité "numérique" est une toute autre histoire "
et cette question me brulait les doigts et le clavier depuis un bon moment. Je me demandais qui l'aborderait.
Rien ne "permet d'affirmer que 123 est numérique. Dans excel, pardon dans open office calc wink on peut très bien avoir une cellule qui contient 123 alors que celle ci n'est pas numérique ce que révèle fort efficacement la fonction estnum de Calc.
C'est pour cela qu'il existe des "Bases" numériques.
Tout est histoire de contexte, ensemble, notation... donc de périmètre
La preuve, à l'origine, il était question d'un seul caractère sans préciser de base. Par défaut, c'est le décimal. Nous nous sommes donc cantonné à 0-9
Ensuite il fut question d'une chaine de caractère, toujours sans préciser de base et d'ensemble
Puis dans la discussion, les décimaux sont apparus, exponentiel et logarithmes népériens....
j'inclus les base 2, 8, 16 ... et toutes celles que vous voudrez bien ajouter et/ou créer...
-- Lucid Lynx --
Hors ligne