[batch] longueur d'une chaine de char

longueur d'une chaine de char [batch] - Shell/Batch - Programmation

Marsh Posté le 20-08-2005 à 12:24:09    

Bonjour à tout le monde,
 
Simple petite question (enfin j'espère)
 
Il y a t'il moyen de récupérer la longueur d'une chaine de caractère ?
 
Si oui comment ? :D
 
Merci


Message édité par folsh le 20-08-2005 à 12:24:21
Reply

Marsh Posté le 20-08-2005 à 12:24:09   

Reply

Marsh Posté le 20-08-2005 à 14:15:17    

Dans quel langage ?
 
Sous Unix, il y a :

chaine_longueur = "$(expr length $une_chaine)"
ou
chaine_longueur = `echo $une_chaine | wc -c`

C'est du ksh, mais je suppose que la même chose existe en sh, ou bash.
En csh, ce sera surement un strlen().
 
Sous Windows, en cscript, c'est "len".
Etc.


Message édité par olivthill le 20-08-2005 à 14:18:04
Reply

Marsh Posté le 20-08-2005 à 15:52:22    

j'utilise windows avec son petit bloc notes

Reply

Marsh Posté le 21-08-2005 à 08:51:46    

J'ai continué à chercher, ms j'ai toujours rien trouvé, qql'un :(

Reply

Marsh Posté le 21-08-2005 à 11:44:29    

Citation :

j'utilise windows avec son petit bloc notes


Le "petit bloc notes" n'est pas un langage  :sweat:  
 
Comme ce message a été mis dans la section batch, je présume que tu veux obtenir la longueur d'une chaine de charactères dans un fichier de commande DOS (".bat" ).
Malheureusement, les instructions des fichiers .bat sont très peu nombreuses et assez limitées. Il n'en existe pas qui retourne la longueur d'une chaine de caractères.
 
Sous Windows Me, NT, XP (peut-etre aussi win95 et 98), à la place des ".bat", il existe maintenant les "scripts" qui sont des fichiers suffixés par ".vbs" ou "whs", et qui se lancent avec "cscript.exe". Les "scripts" contiennent l'instruction "Len" qui renvoie la longueur d'une chaine de caractères (comme je le disais précédemment).
 
Voici un script, appelons-le "strlen.vbs" qui affiche la longueur de la chaine "abc".

Wscript.Echo Len("abc" )

Pour le lancer, il faut taper "cscript strlen.vbs" dans une fenêtre DOS ou avec l'option du menu "Démarrer/Exécuter"
 
Cscript.exe accepte aussi des paramètres externes. Nous allons en tirer profit et réécrire notre script ainsi

Wscript.Echo Len(Wscript.Arguments.Item(0))


 
Maintenant, nous pouvons écrire un ".bat" qui utilise ce script. Par exemple :

set ma_chaine=course de chars
echo %ma_chaine%
cscript //Nologo strlen.vbs "%ma_chaine%"

CQFD  :)


Message édité par olivthill le 21-08-2005 à 11:46:20
Reply

Marsh Posté le 21-08-2005 à 14:30:02    

ok, merci pr ton aide

Reply

Marsh Posté le 20-07-2008 à 18:45:52    

(Je sais bien que je déterre ce sujet de 3ans lol)
Si ça intéresse quelqu'un : il est bien possible de le faire en batch (et sans script).
Pour cela une simple boucle qui retire un par un les caractères de la chaîne en comptant combien de fois avant d'arriver à la chaîne vide.
 
@ECHO OFF
SET a=%1
SET longueur=0
 
:loop
IF "%a%"=="" GOTO endloop
SET a=%a:~0,-1%
SET /A longueur=%longueur%+1
GOTO loop
 
:endloop
ECHO %longueur%
 
(on peut aisément réutiliser cette valeur si besoin par exemple si l'argument doit avoir une taille minimale acceptée)
 
EDIT :
Mon bout de code ne fonctionne pas si l'argument est entre guillemets:
Remplacer la ligne
IF "%a%"=="" GOTO endloop
par
IF NOT DEFINED a GOTO endloop
Mais ça ajoute 2 au résultat (je ne sais pas comment tester si la chaîne est entre guillemets ou pas, je n'ai pas cherché j'en ai pas besoin dans mon cas les guillemets sont tjr là)


Message édité par bizu53 le 20-07-2008 à 19:46:02
Reply

Marsh Posté le 21-07-2008 à 04:17:13    

set a=%~1
et hop plus de guillement...
 

Citation :

Malheureusement, les instructions des fichiers .bat sont très peu nombreuses et assez limitées. Il n'en existe pas qui retourne la longueur d'une chaine de caractères.


J'ai envie de dire : ou pas ! Le batch est beaucoup plus puissant qu'on ne le pense...


Message édité par blastkiller le 21-07-2008 à 04:19:04
Reply

Sujets relatifs:

Leave a Replay

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