longueur d'une chaine de char [batch] - Shell/Batch - Programmation
Marsh Posté le 20-08-2005 à 14:15:17
Dans quel langage ?
Sous Unix, il y a :
chaine_longueur = "$(expr length $une_chaine)" |
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.
Marsh Posté le 21-08-2005 à 08:51:46
J'ai continué à chercher, ms j'ai toujours rien trouvé, qql'un
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
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 |
CQFD
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à)
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...
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 ?
Merci
Message édité par folsh le 20-08-2005 à 12:24:21