#1 Le 04/01/2008, à 21:39
- wlourf
[résolu] [bash] conversion chaine en décimal
Bonsoir d'un débutant tenace,
J'ai ce simple script :
#!/bin/bash
essai="04:06"
e1=$((${essai%:*}))
e2=$((${essai#*:}))
echo $e1'__'$e2
o๠"essai" est toujours de la forme HH:MM, avec des chiffres inférieurs à 8 je n'ai pas de problème (11:12, 03:07, 05:25) par contre si un des chiffres (en fait c'est du texte bien sûr) est 08 ou 09 j'ai un beau message :
ex essai="07:09"
line 6: 09: valeur trop grande pour la base (error token is "09")
Que puis-je faire pour remédier à ça ?
Merci d'avance!
Dernière modification par wlourf (Le 05/01/2008, à 00:18)
Hors ligne
#2 Le 04/01/2008, à 22:24
- Alain.g
Re : [résolu] [bash] conversion chaine en décimal
salut
Précédé d'un zéro, le nombre est interprété comme un octal, donc pas de 8 ni de 9 (0->7 uniquement).
$((10+1)) sera égal à 11
$((010+1)) sera égal à 9
Ce n'est pas cela qu'on appelle des expressions régulières.
Xubuntu Karmic !
Hors ligne
#3 Le 04/01/2008, à 22:30
- best_friend_fr
Re : [résolu] [bash] conversion chaine en décimal
Attention, 09 n'existe pas, c'est normal
09 est de l'octal, donc pas de 8 ni de 9.
grille...
Dernière modification par best_friend_fr (Le 04/01/2008, à 22:30)
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#4 Le 04/01/2008, à 22:51
- wlourf
Re : [résolu] [bash] conversion chaine en décimal
ah ok, merci pour vos réponses ... je pensais bien qu'il y avait un lien avec l'octal mais alors comment faire pour que 09 et 08 extraits de 09:08 soient convertis en décimaux, je suppose que l'erreur vient de là ${essai%:*} car c'est un copié collé dont j'avoue de pas comprendre la syntaxe ; un coup %, un coup #...
Merci
Hors ligne
#5 Le 04/01/2008, à 23:35
- best_friend_fr
Re : [résolu] [bash] conversion chaine en décimal
tu veux faire quoi exactement ?
Si par exemple tu veux afficher
4__9 pour l'entree 04:09, tu peux faire
#!/bin/bash
essai="04:09"
e1=${essai%:*}
e2=${essai/*:}
e1=$((10#`echo $e1`))
e2=$((10#`echo $e2`))
echo $e1'__'$e2
Dernière modification par best_friend_fr (Le 04/01/2008, à 23:36)
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#6 Le 04/01/2008, à 23:48
- wlourf
Re : [résolu] [bash] conversion chaine en décimal
je voulais faire des calculs sur ces chiffres par la suite, ça marche donc avec ce que tu m'as indiqué 10#
#!/bin/bash
essai="08:08"
e1=$((10#${essai%:*}))
e2=$((10#${essai/*:}))
#e1=$((10#$e1))
#e2=$((10#$e2))
r1=$(($e1*60))
r2=$(($e2*60))
echo $r1'__'$r2
me retourne 480__480, trop bien! merci
Hors ligne
#7 Le 05/01/2008, à 00:06
- best_friend_fr
Re : [résolu] [bash] conversion chaine en décimal
Tu peux donc mettre resolu dans le titre.
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#8 Le 05/01/2008, à 00:37
- Alain.g
Re : [résolu] [bash] conversion chaine en décimal
j'avoue de pas comprendre la syntaxe ; un coup %, un coup #
C'est expliqué ici : http://abs.traduc.org/abs-5.1-fr/ch09s02.html#substringremoval
juste pour préciser, par rapport aux expressions régulières (rationnelles), puisque c'était à l'origine le titre du sujet, ça donnerait quelque chose comme cela :
#!/bin/bash
essai="08:08"
e1=`expr $essai : '0\?\([0-9]\+\)'`
e2=`expr $essai : '.*:0\?\([0-9]\+\)'`
Dernière modification par Alain.g (Le 05/01/2008, à 00:57)
Xubuntu Karmic !
Hors ligne
#9 Le 05/01/2008, à 00:43
- wlourf
Re : [résolu] [bash] conversion chaine en décimal
merci pour ces précisions
Hors ligne