BATCH - Séparer les caractères d'une variable
Résolu/Fermé
Fonx2
Messages postés
331
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
-
17 mai 2010 à 17:12
T0MuX - 20 juil. 2016 à 09:24
T0MuX - 20 juil. 2016 à 09:24
A voir également:
- BATCH - Séparer les caractères d'une variable
- Caractères ascii - Guide
- Fichier batch - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux mac - Guide
7 réponses
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
18 mai 2010 à 07:53
18 mai 2010 à 07:53
hello
pas besoin d'utiliser le /a si il n'y a pas de calcul
C:> set /a DateConcerne="100509"
100509
C:> set J=%DateConcerne:~-2%
C:> echo %J%
09
pour enlever le 0 devant si on veut faire des calculs:
C:> set /a J=1%J%-100
9
pas besoin d'utiliser le /a si il n'y a pas de calcul
C:> set /a DateConcerne="100509"
100509
C:> set J=%DateConcerne:~-2%
C:> echo %J%
09
pour enlever le 0 devant si on veut faire des calculs:
C:> set /a J=1%J%-100
9
karirovax
Messages postés
3221
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
204
17 mai 2010 à 22:08
17 mai 2010 à 22:08
Re, ( exusez moi pour le retard à raison d'un prb de déconnection internet ) ;)
pour qu'il ya deux cas spéciale ( 08 et 09 ) voici la démarche :
@echo off
set /a DateConcerne="100509"
set /a M="%DateConcerne:~2,2%"
set /a A=20"%DateConcerne:~0,2%"
if "%DateConcerne:~-2%" == "08" (echo %DateConcerne% %DateConcerne:~-2% %M% %A%)
if "%DateConcerne:~-2%" == "09" (echo %DateConcerne% %DateConcerne:~-2% %M% %A%)
if "%DateConcerne:~-2%" NEQ "09" (set /a J="%DateConcerne:~-2%"&&echo %DateConcerne% %J% %M% %A%)
pause
karirovax
pour qu'il ya deux cas spéciale ( 08 et 09 ) voici la démarche :
@echo off
set /a DateConcerne="100509"
set /a M="%DateConcerne:~2,2%"
set /a A=20"%DateConcerne:~0,2%"
if "%DateConcerne:~-2%" == "08" (echo %DateConcerne% %DateConcerne:~-2% %M% %A%)
if "%DateConcerne:~-2%" == "09" (echo %DateConcerne% %DateConcerne:~-2% %M% %A%)
if "%DateConcerne:~-2%" NEQ "09" (set /a J="%DateConcerne:~-2%"&&echo %DateConcerne% %J% %M% %A%)
pause
karirovax
karirovax
Messages postés
3221
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
204
17 mai 2010 à 21:02
17 mai 2010 à 21:02
salut
le prb ici sauf pour les deux valeurs 08 et 09
( pour votre cas 100509 )
car la commande SET traite les deux valeurs comme octale et comme les deux ne sont pas valides comme octale alors ils sont réfusés ( 01 , 02 , 03 , ... , 07 )
la petite valeur octale dans cette notation est le numéro 01 et la plus grande est le 07 c pour ca que le 08 et 09 sont réfusé
la ligne qui vous indique ce problème est pour votre variable J :
set /a J=%DateConcerne:~-2%
car elle affiche les deux derniers caractére qui sont 09
karirovax
le prb ici sauf pour les deux valeurs 08 et 09
( pour votre cas 100509 )
car la commande SET traite les deux valeurs comme octale et comme les deux ne sont pas valides comme octale alors ils sont réfusés ( 01 , 02 , 03 , ... , 07 )
la petite valeur octale dans cette notation est le numéro 01 et la plus grande est le 07 c pour ca que le 08 et 09 sont réfusé
la ligne qui vous indique ce problème est pour votre variable J :
set /a J=%DateConcerne:~-2%
car elle affiche les deux derniers caractére qui sont 09
karirovax
Fonx2
Messages postés
331
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
132
Modifié par Fonx2 le 17/05/2010 à 21:16
Modifié par Fonx2 le 17/05/2010 à 21:16
Oui, le problème concerne la variable %J% (comme mis en gras précedemment) Merci pour cette explication.
Je ne connait pas la notion de valeurs "octales" (je maitrise mieux les entiers et les réels!).
Par conséquent, j'ai du mal à saisir l'impossibilité pour l'ordinateur à stocker une valeur supérieur à "07", surtout si on considère le fait qu'il est possible de mettre "10", qui est plus grand que "07"...
Bref, en tout cas, et même si la connaissance de la cause est un premier pas, je serais surtout interessé par une solution à mon problème...
Comment faire pour contourner cette limitation à "07" des valeurs octales?
Je ne connait pas la notion de valeurs "octales" (je maitrise mieux les entiers et les réels!).
Par conséquent, j'ai du mal à saisir l'impossibilité pour l'ordinateur à stocker une valeur supérieur à "07", surtout si on considère le fait qu'il est possible de mettre "10", qui est plus grand que "07"...
Bref, en tout cas, et même si la connaissance de la cause est un premier pas, je serais surtout interessé par une solution à mon problème...
Comment faire pour contourner cette limitation à "07" des valeurs octales?
karirovax
Messages postés
3221
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
204
17 mai 2010 à 21:25
17 mai 2010 à 21:25
Re,
non
le 10 en décimal égal au 12 en octal
c pas comme vous dites 10 est grand que le 07 non
par Ex : dans le PC ( language machine ) il traite seulement les valeurs binaires ( 0 et 1 )
si on ecrit 11 en binaire ce n'est pas le nombre anze !! c la valeur 4 en décimale
donc il n'exsiste pas le 2 ou 3 ou 4 ... etc dans les valeurs binaires et ceci ne dit pas qu'on ne paut pas l'ecrire dans une autre base " il ya décimale ( 0 , 1 , 2 , .. 10 ) connaitre pour tout le monde depuis l'ecole primere " " l'héxadécimal ( 0 , 1 , ... , 9 , A , B , C , D , E , F )
" octal ( 0, 1 , 2 , ... , 8 ) "
non
le 10 en décimal égal au 12 en octal
c pas comme vous dites 10 est grand que le 07 non
par Ex : dans le PC ( language machine ) il traite seulement les valeurs binaires ( 0 et 1 )
si on ecrit 11 en binaire ce n'est pas le nombre anze !! c la valeur 4 en décimale
donc il n'exsiste pas le 2 ou 3 ou 4 ... etc dans les valeurs binaires et ceci ne dit pas qu'on ne paut pas l'ecrire dans une autre base " il ya décimale ( 0 , 1 , 2 , .. 10 ) connaitre pour tout le monde depuis l'ecole primere " " l'héxadécimal ( 0 , 1 , ... , 9 , A , B , C , D , E , F )
" octal ( 0, 1 , 2 , ... , 8 ) "
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Fonx2
Messages postés
331
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
132
17 mai 2010 à 21:31
17 mai 2010 à 21:31
Merci pour cette réponse rapide!
Oui, je sais que le PC traite les données en binaire (base 2).
Je sais aussi ce qu'est un chiffre Hexadécimale (base 16 - de 0 à f).
Mais là encore, sa ne solutionne pas mon problème!
Comment récupérer mes deux derniers caractère dans ma variable, en type entier (décimale - base 10!)?!?
Oui, je sais que le PC traite les données en binaire (base 2).
Je sais aussi ce qu'est un chiffre Hexadécimale (base 16 - de 0 à f).
Mais là encore, sa ne solutionne pas mon problème!
Comment récupérer mes deux derniers caractère dans ma variable, en type entier (décimale - base 10!)?!?
Fonx2
Messages postés
331
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
132
Modifié par Fonx2 le 17/05/2010 à 22:20
Modifié par Fonx2 le 17/05/2010 à 22:20
Mais pas du tout! Je suis très content de partager mon problème avec toi...
Bon cette solution permet en effet de régler le problème de l'affichage mais je n'ai poster que la partie du code à problème car en fait, je dois absolument ranger ce résultat dans une variable pour ensuite l'utiliser dans un savant calcul...
que pense tu d'écrire quelque chose comme:
set /a DateConcerne="100509"
set /a M="%DateConcerne:~2,2%"
set /a A=20"%DateConcerne:~0,2%"
if "%DateConcerne:~-2%" == "08" (set /a J=8)
if "%DateConcerne:~-2%" == "09" (set /a J=9)
if "%DateConcerne:~-2%" NEQ "09" (set /a J="%DateConcerne:~-2%")
echo %DateConcerne% %J% %M% %A%
pause
Bon cette solution permet en effet de régler le problème de l'affichage mais je n'ai poster que la partie du code à problème car en fait, je dois absolument ranger ce résultat dans une variable pour ensuite l'utiliser dans un savant calcul...
que pense tu d'écrire quelque chose comme:
set /a DateConcerne="100509"
set /a M="%DateConcerne:~2,2%"
set /a A=20"%DateConcerne:~0,2%"
if "%DateConcerne:~-2%" == "08" (set /a J=8)
if "%DateConcerne:~-2%" == "09" (set /a J=9)
if "%DateConcerne:~-2%" NEQ "09" (set /a J="%DateConcerne:~-2%")
echo %DateConcerne% %J% %M% %A%
pause
karirovax
Messages postés
3221
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
204
17 mai 2010 à 22:29
17 mai 2010 à 22:29
Re,
donc je trouve que c bon pour votre code ;)
donc je trouve que c bon pour votre code ;)
Fonx2
Messages postés
331
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2013
132
17 mai 2010 à 22:33
17 mai 2010 à 22:33
Je test sa demain car c'est pour mon boulot et la... je suis chez moi!
En tout cas, merci pour ton aide!
Dès que sa marche, je met le sujet en résolut!
Bonne continuation!
En tout cas, merci pour ton aide!
Dès que sa marche, je met le sujet en résolut!
Bonne continuation!
karirovax
Messages postés
3221
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
22 juin 2016
204
17 mai 2010 à 22:39
17 mai 2010 à 22:39
Re, de rien
s'il ya des nouveaux pour demain ... je suis ici ;)
s'il ya des nouveaux pour demain ... je suis ici ;)
Salut, petit déterrage de post car j'ai rencontré le même problème.
Mon script à moi fait un test sur la date de plusieurs fichiers (grace à une boucle) et je travaille avec des variable délayée de type !variable!.
Je découpe la date pour mettre les années dans !yy! les mois dans !mm! et les jours dans !jj!
puis ensuite je fais un calcul, afin de faire une comparaison (calcul) plus tard, pour le mettre dans une variable comme cela : set /a var=!jj!+31+!var2!+184
Grâce à vos posts je me suis en effet rendu compte que seuls les fichiers donnants jj=08 ou jj=09 posaient problème. J'ai alors réglé mon problème en définissant les variables suivantes au début de ma boucle :
if jj=08 set jj=8
if jj=09 set jj=9
Ca a marché du premier coup :D merci !!
Mon script à moi fait un test sur la date de plusieurs fichiers (grace à une boucle) et je travaille avec des variable délayée de type !variable!.
Je découpe la date pour mettre les années dans !yy! les mois dans !mm! et les jours dans !jj!
puis ensuite je fais un calcul, afin de faire une comparaison (calcul) plus tard, pour le mettre dans une variable comme cela : set /a var=!jj!+31+!var2!+184
Grâce à vos posts je me suis en effet rendu compte que seuls les fichiers donnants jj=08 ou jj=09 posaient problème. J'ai alors réglé mon problème en définissant les variables suivantes au début de ma boucle :
if jj=08 set jj=8
if jj=09 set jj=9
Ca a marché du premier coup :D merci !!
Modifié par Fonx2 le 18/05/2010 à 09:24
Voici d'ailleurs le code final:
Ce code fonctionne parfaitement et à tout les coups. Il résout le problème de la valeur octal expliqué par karirovax et permet l'utilisation ultérieure des variables pour faire des calculs.
Merci donc à dubcek et à karirovax pour leurs contributions et explications qui ont permis de résoudre mon problème!
20 mai 2010 à 20:37
donc félicitation à vous
et pour dubcek j'ai pensé que Fonx2 a besoin de son code pour lui rediriger vers un autre calcul ( autre fichier batch ou un code plus complex ) mais je trouve que vous avez bien comprendre l'objectif de Fonx2 et beinh merci à vous pour cette meilleure explication ;)
21 mai 2010 à 07:27
23 mai 2010 à 20:07
oui exactement , et merci à vous pour votre meilleur réponse ;)