elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] 6 maneras de saber la longitud de una cadena
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] 6 maneras de saber la longitud de una cadena  (Leído 12,027 veces)
modubat

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[Batch] 6 maneras de saber la longitud de una cadena
« en: 21 Septiembre 2010, 16:34 pm »

Saber la longitud de una cadena (length string) es una función que se necesita usar en muchos codes

aqui dejo unas diferentes formas de hallar la longitud que hice hace un tiempo

1. Caracter a caracter hasta que uno no se defina

Código
  1. @ECHO OFF
  2. CALL :LENGHT "STRING"
  3. ECHO.%LEN%
  4. PAUSE>NUL
  5.  
  6. ========================================================================
  7.  
  8. :: Mide la longitud de una cadena
  9. :: Devuelve errorlevel=1 si no se especifica la cadena
  10.  
  11. :LENGHT STRING
  12.  
  13. SETLOCAL ENABLEEXTENSIONS
  14. SET "STRING=%~1"
  15. :: Empieza el contador en 0
  16. IF "%TMPVAR%"=="" SET/A CONT=0
  17. :: Si no se mandan parametros salimos
  18. IF NOT DEFINED STRING ENDLOCAL & EXIT/B 1
  19. ::
  20. :: Extracción de caracteres que aumenta en 1
  21. CALL SET "VAR=%%STRING%:~%CONT%,1%%"
  22. ::
  23. IF DEFINED VAR (
  24. :: Sumamos el contador y llamamos a la funcion
  25. SET "TMPVAR=$" & SET/A CONT+=1 & CALL %~0 "%STRING%"
  26. ) ELSE (
  27. ::Declaramos la variable len
  28. CALL SET LEN=%%CONT%%
  29. )
  30. ENDLOCAL & SET "LEN=%LEN%"
  31. EXIT /B
  32.  
  33. ========================================================================
  34.  
  35.  

2.Añadir un caracter hasta que sea igual a la palabra

Código
  1. @ECHO OFF
  2. CALL :LENGTH "STRING"
  3. ECHO %LEN%
  4.  
  5. =========================================================================
  6.  
  7. :: Devuelve la longitud de una string
  8. :: Si no se define la string devuelve errorlevel=1
  9.  
  10. :LENGTH STRING
  11.  
  12. SETLOCAL ENABLEEXTENSIONS
  13. SET "STRING=%~1"
  14. :: Si no se pasan argumentos salimos.
  15. IF NOT DEFINED STRING EXIT/B 1
  16. :: Empieza el contador en 0
  17. IF "%TMPVAR%"=="" SET/A CONT=0
  18. ::
  19. CALL SET "VAR=%%STRING:~,%CONT%%%"
  20. IF NOT "%VAR%"=="%STRING%" (
  21.  
  22. :: Sumamos 1 al contador
  23. SET "TMPVAR=$"
  24. SET/A CONT+=1
  25. :: Llamamos a la funcion
  26. CALL %0 "%~1"
  27.  
  28. ) ELSE (
  29. CALL SET LEN=%%CONT%%
  30. )
  31. ENDLOCAL & SET "LEN=%LEN%"
  32.  
  33. =========================================================================
  34.  

3.Sabiendo el peso de un archivo (%~z)

Código
  1. @ECHO OFF
  2. CALL :LENGTH "STRING"
  3. ECHO.%LEN%
  4. PAUSE>NUL & EXIT
  5.  
  6. ==============================================================================
  7.  
  8. :: Mide la longitud de una string
  9. :: Crea en el disco un archivo TMP.DAT que al finalizar su función se borra
  10.  
  11. :LENGTH STRING
  12. SETLOCAL ENABLEEXTENSIONS
  13. :: Nos posicionamos en tmp
  14. PUSHD "%TMP%"
  15. :: Creamos el archivo que contiene la string
  16. ECHO.%~1> "TMP.DAT"
  17. ::
  18. FOR %%? IN ("TMP.DAT") DO (
  19. :: Restamos dos caracteres
  20. IF EXIST %%~? SET/A "LEN=%%~Z?-2"
  21. :: Eliminamos el archivo
  22. DEL /F /Q %%~F?
  23. )
  24. ::
  25. ::
  26. (
  27. SET LEN=%LEN%
  28. )
  29.  
  30. ==============================================================================
  31.  
  32.  

4.Con el comando dir

Código
  1. @ECHO OFF
  2. CALL:LENGTH "STRING"
  3. ECHO.%LEN%
  4.  
  5. ========================================================================================
  6.  
  7. :: Mide la longitud de una string
  8. :: Crea en el disco un archivo TMP.DAT que al finalizar su función se borra
  9. :: Devuelve errorlevel=1 si no se especifica la cadena
  10.  
  11. :LENGTH
  12.  
  13. SETLOCAL ENABLEEXTENSIONS
  14. :: Nos posicionamos en tmp
  15. PUSHD "%TMP%"
  16. :: Salimos si no se pasan argumentos
  17. IF "%~1"=="" EXIT/B 1
  18. ::
  19. :: Creamos el archivo tmp.dat que contiene la string
  20. ECHO.%~1>TMP.DAT
  21. :: Con dir obenemos el peso del archivo
  22. FOR /F "TOKENS=3" %%F IN ('"DIR /A:-D | FIND /I "TMP.DAT""') DO SET "LEN=%%~F"
  23. ::RESTAMOS DOS CARACTERES (ASCII 10 Y 13)
  24. SET/A LEN-=2
  25. ::
  26. ENDLOCAL & SET LEN=%LEN%
  27.  
  28. ========================================================================================
  29.  
  30.  

5. Con el comando findstr

Código
  1. @ECHO OFF
  2. CALL :LENGTH "STRING"
  3. ECHO.%LEN%
  4.  
  5. ==============================================================
  6.  
  7. :: Mide la longitud de una cadena
  8. :: Devuelve errorlevel=1 si no se especifica la cadena
  9.  
  10. :LENGTH "STRING"
  11.  
  12. SETLOCAL ENABLEEXTENSIONS
  13. :: Salimos si no se especifican argumentos
  14. IF "%~1"=="" EXIT/B 1
  15. ::
  16. :: Podemos usar también el metacaracter $
  17. FOR /F "DELIMS=:" %%F IN (
  18. '"(ECHO.%~1 & ECHO.) | FINDSTR /O ."'
  19. ) DO SET/A LEN=%%~F-3
  20. ENDLOCAL & SET "LEN=%LEN%"
  21.  
  22. ==============================================================
  23.  
  24.  

6. Con el comando debug

Código
  1. @ECHO OFF
  2. CALL :LENGTH "STRING"
  3. ECHO.%LEN%
  4.  
  5. ===================================================================================
  6.  
  7. :: Mide la longitud de una string
  8. :: Crea en el disco dos archivos TMP.BIN y TMP.DAT que se borran al finalizar.
  9. :: Usa el comando debug
  10.  
  11. :LENGTH STRING
  12.  
  13. SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  14. :: Nos posicionamos en temp
  15. PUSHD "%TEMP%"
  16. :: Creamos el archivo tmp.bin con la string
  17. ECHO.%~1>TMP.BIN
  18. ::
  19. :: Cargamos el archivo con debug
  20. (
  21. ECHO.R CX
  22. ECHO.Q
  23. ) | DEBUG TMP.BIN >TMP.DAT
  24.  
  25. :: Con for cogemos el registro CX
  26. FOR /F "TOKENS=2 SKIP=1" %%A IN ('TYPE TMP.DAT ^| SORT') DO SET "VAR=%%A"
  27. :: Quitamos ceros
  28. FOR /L %%A IN (1 1 4) DO IF "!VAR:~0,1!" EQU "0" SET "VAR=!VAR:~1!"
  29. ::
  30. :: Restamos 2 caracteres
  31. SET/A VAR-=2
  32. :: Eliminamos archivos creados
  33. FOR %%F IN ("TMP.BIN" "TMP.DAT") DO DEL /Q /F %%~FF
  34. POPD & ENDLOCAL & SET "LEN=%VAR%"
  35.  
  36. ===================================================================================
  37.  
  38.  
  39.  

saludos :D


En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: [Batch] 6 maneras de saber la longitud de una cadena
« Respuesta #1 en: 21 Septiembre 2010, 22:05 pm »

Muy curioso, solo había visto el primer método.


En línea

Tsurematsu

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: [Batch] 6 maneras de saber la longitud de una cadena
« Respuesta #2 en: 31 Enero 2021, 03:56 am »

Realmente es muy curioso, por cierto que tal este codigo basado en el primer metodo.

Es para poder contar los elementos con un separador.

Código:

@echo off
cls
call :LENGHT "uno,dos,tres,cuatro,cinco,seis"
echo %LEN%
pause

:LENGHT STRING
SETLOCAL ENABLEEXTENSIONS
SET "STRING=%~1"
:: Empieza el contador en 0
IF "%TMPVAR%"=="" SET/A CONT=1

:: Si no se mandan parametros salimos
IF NOT DEFINED STRING ENDLOCAL & EXIT/B 1

set "res="
for /f "tokens=%CONT% delims=," %%a in (%1) do (
set res=%%a
)
:: Extracción de caracteres que aumenta en 1
CALL SET "VAR=%res%"

IF DEFINED VAR (
IF NOT "%VAR%"=="" SET "TMPVAR=$" & SET/A CONT+=1 & CALL %~0 "%STRING%"
) ELSE (
SET/A CONT-=1
CALL SET LEN=%%CONT%%
)

ENDLOCAL & SET "LEN=%LEN%"
EXIT /B


Espero que a vosotros tambien os ayude.  :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[PSP] 3 Maneras para saber si tu PSP se puede Liberar
Juegos y Consolas
Keiser 0 10,693 Último mensaje 24 Diciembre 2010, 11:43 am
por Keiser
obtener longitud de una cadena sin LEN « 1 2 »
Programación Visual Basic
x64core 11 8,733 Último mensaje 10 Septiembre 2011, 02:24 am
por Psyke1
[C] ¿Por que una cadena acepta mas valores que su longitud? (solucionado)
Programación C/C++
xiruko 8 4,557 Último mensaje 19 Abril 2012, 06:06 am
por david_BS
Exagentes de la CIA comparten seis maneras de saber si alguien nos miente
Foro Libre
Mister12 0 1,567 Último mensaje 27 Mayo 2014, 05:59 am
por Mister12
Calcular longitud de cadena C++ (punteros) « 1 2 »
Programación C/C++
Bob1098 14 20,712 Último mensaje 5 Septiembre 2015, 23:59 pm
por Bob1098
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines