faire entrer dans une variable le nombre de carractere d une autre

faire entrer dans une variable le nombre de carractere d une autre - Shell/Batch - Programmation

Marsh Posté le 23-05-2006 à 18:21:35    

bonjour a tous :)
 
voila comme cela est dit dans le titre , j'aimerai bien savoir comment je pourrai faire pour "compter" le nombre de carracteres present dans une variable.
 
exemple :
 
@echo off
set a=0
 
set /P a=entrez un mot
 
if %a%==5 echo votre mot contient 5 carracteres.
 
 
j ai fait une recherche qui n'a pas ete concluante , escusez moi si j ai mal cherché et dans ce cas pourriez vous svp m'indiquer le lien de ce topic ? merci ;)
 
merci a vous tous d'avance  
bonne soirer ;)

Reply

Marsh Posté le 23-05-2006 à 18:21:35   

Reply

Marsh Posté le 23-05-2006 à 18:41:41    

Ce n'est pas possible en batch.
 
Il est juste possible de vérifier si une chaîne est de longueur n, où n est prédéfinie par un chiffre précis (et pas variable).

Reply

Marsh Posté le 23-05-2006 à 19:22:01    

a ok mince ... :s merci de ta reponse ;)
et comment je pourrai faire alors pour "compter" le nombre de caractere ?  
je peut genre faire :
 
echo %a% >> C:\nombre carractere.txt
et ensuite avec un commande for reprendre la longueur de la chaine et la mettre dans une autre variable ?  
et apres comparer ma variable a un nombre genre 3 ?
 
 
merci encore de ta reponse ;)

Reply

Marsh Posté le 23-05-2006 à 21:00:25    

payes a écrit :

et comment je pourrai faire alors pour "compter" le nombre de caractere ?


Justement, comme j'avais dit, tu ne peux pas, ou du moins je ne sais pas faire ;)
 
On peut juste vérifier si la chaîne a 5 caractères par exemple, c'est-à-dire :

Code :
  1. if not "%VAR:~4,1%" == "" (
  2.   if "%VAR:~5,1%" == "" (
  3.     echo %VAR% est de longueur 5
  4.   )
  5. )


 
mais on ne peut pas remplacer 5 par une variable. Ca ne marche qu'avec un chiffre concret et ne marche pas avec la valeur d'une variable.

Reply

Marsh Posté le 23-05-2006 à 22:11:44    

okai , je vais me debrouiller avec ca , merci pour le script ;)
 
merci beaucoup , je test tout ca et jte dit si ca a marcher ;)
bonne soirer ;)

Reply

Marsh Posté le 24-05-2006 à 14:56:48    

eu par contre escuse mais j ai un pb au niveau du script :)
 
quand je met  
@echo off
 
set a=0
 
cls
set /p a=:
if not "%a:~4,1%" == "5" (
  if "%a:~5,1%" == "5" (
    echo %a% est de longueur 5
  ) else echo %a% = pas 5
)
pause>>nul
 
il me met lorsque je rentre 5 : que cela n est pas egal a 5
et lorsque je rentre 2 par exmple , il met la meme .  
 
j ai tester different truc, du genre enlever le chiffre dans les "" , le mettre ds les premiers mais pas dans les seconds etc mais je n'ai pas trouver d'ou venait mon erreur , pourrait m'indiquer ou se trouve l'erreur plz ?  
merci d'avance ;)

Reply

Marsh Posté le 24-05-2006 à 17:37:24    

Tu as mal compris la signification de %VAR:~x,y% ;)
 
Regarde l'aide de  
set
 
et revois mon code du dessus.
 
Rappel : on est en train de vérifier la longueur d'une chaîne :D

Reply

Marsh Posté le 25-05-2006 à 17:16:28    

a voui okai , desoler j'avais mal compris ^^
 
ton code veut dire : dans la variable VAR lorsque je m'ecarte de 4 carractere et que je prend le dernier , si il est egal a rien ( les "" ) et si lorsque je mecarte de 5 et que je prend le dernier carractere , si il est egal a rien lui aussi alors afficher la chaine est de 5 carracteres ?
 
et en effet ca marche tres bien ... :d
dsl pour tout ce derangement et merci beaucoup pour ton aide nglechau ;)

Reply

Marsh Posté le 25-05-2006 à 18:43:01    

par contre , j ai un gros soucis :'( ca fait 45 minutes que je suis en train de galerer et je vien de decouvrir qu en fait mon script doit commporter une faille
 
set m1=0
set /p m1=rentrez le mot
 
 
if not "%m1:~0,1%" == "" (
  if "%m1:~1,1%" == "" (
    goto m1e1  
 )
)
 
if not "%mc1:~1,1%" == "" (
  if "%mc1:~2,1%" == "" (
    goto m1e2  
 )
)
 
if not "%mc1:~2,1%" == "" (
  if "%mc1:~3,1%" == "" (
    goto m1e3  
 )
)
 
 
if not "%m1:~3,1%" == "" (
  if "%m1:~4,1%" == "" (
    goto m1e4  
 )
)
 
if not "%m1:~4,1%" == "" (
  if "%m1:~5,1%" == "" (
    goto m1e5  
 )
)
 
if not "%m1:~5,1%" == "" (
  if "%m1:~6,1%" == "" (
    goto m1e6  
 )
)
 
:m1e1
echo 1
goto l
 
:m1e2
echo 2
goto l
 
:m1e3
echo 3
goto l
 
 
etc
 
 
le pb c est que la il m'affiche tout le temps 1 meme si m1=ton (soit 3 carractere ) est ce que quelqu un pourrait m'aider pour que des qu il ai verifier que m1 n est pas egal a 1 carractere , il verifie qu il soit egal a 2 et apres 3 , 4 etc svp ?  
 
merci :)

Reply

Marsh Posté le 25-05-2006 à 21:46:39    

Après le dernier test, tu dois sauter le bloc des procédures. C'est-à-dire  
---
.........
.........
if not "%m1:~5,1%" == "" (  
  if "%m1:~6,1%" == "" (  
    goto m1e6    
 )  
)
goto end
 
:mxex
.......
.......
 
:end
---
 
N'oublie pas que sans les goto, les commandes sont appelées l'une après l'autre dans l'ordre qu'elles sont écrites dans le script.
 
J'imagine que tu vas optimiser ton code quand ça aura fonctionné correctement, parce que là pour le moment, c'est un peu rédondant ;)
 
PS : et il y a quelques coquilles dans le nom des variables : faute de frappe je suppose :D


Message édité par wackevat le 25-05-2006 à 21:48:15
Reply

Marsh Posté le 25-05-2006 à 21:46:39   

Reply

Marsh Posté le 25-05-2006 à 23:23:41    

lol voui , merci pour les erreurs , jlé avait pas vu :) par contre quand tu dit optimiser mon code , tu pourrais etre plus precis stp , je peut le rendre plus simple ? :)
merci ;)

Reply

Marsh Posté le 25-05-2006 à 23:30:39    

Pour l'optimisation, observe : dans ton code, tu as :
if "%m1:~x,1%" == ""
 
puis plus tard :
if not "%m1:~x,1%" == ""
 
donc ça fait une opération de plus. Alors qu'un
else
suffirait. En gros, compacter/combiner tes comparaisons quoi ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed