Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: carlitos.dll en 28 Julio 2008, 22:02 pm



Título: Batch - Contar letras de una variable
Publicado por: carlitos.dll en 28 Julio 2008, 22:02 pm
Código:

::CarlitoS.dll
::Función que cuenta los carácteres de una variable
@echo off
setlocal enabledelayedexpansion

set /p palabra=Ingrese una palabra con espacios si quiere:

if defined palabra (call :length %palabra: =_%)
if defined %palabra: =_%.length (echo !%palabra: =_%.length!)

pause

goto :eof

:length
if "%*"=="" (goto :eof)
set arg=%*
set word=%*
set word=%word: =_%
set /a cont=0
:loop
if not defined word (goto end)
set word=%word:~1%
set /a cont +=1
goto loop
:end
set %arg: =_%.length=%cont%
goto :eof



Título: Re: Batch - Contar letras de una variable
Publicado por: $hyDow en 29 Julio 2008, 15:53 pm
if defined? []:! nunca lo vi, puedes explicar un poco el code? pinta interesante


Título: Re: Batch - Contar letras de una variable
Publicado por: Novlucker en 29 Julio 2008, 16:10 pm
Bueno, creo que carlitos.dll puede explicarlo mejor... pero if defined  lo que hace es comprobar el valor de una variable, si la variable tiene algún valor (aunque sea un espacio), devuelve un verdadero, de lo contrario devuelve un falso  ;)

Saludos


Título: Re: Batch - Contar letras de una variable
Publicado por: Darioxhcx en 29 Julio 2008, 18:20 pm
esto estaba en los ejecicios puestos x SmartGenius no ?
yo tmb los iba ahacer hasta q llegaste y dijiste "los voy a hacer todos"
y perdio la gracia xD

pero sos una maa en batch man
saludos


Título: Re: Batch - Contar letras de una variable
Publicado por: carlitos.dll en 29 Julio 2008, 21:00 pm
If defined lo que hace es preguntar si una variable está definida.

Como al principio del code tengo un set /p palabra=Ingrese texto

si le haces un enter sin escribir nada, el cmd hace:
set palabra=
y borra esa variable.
Podría emularse así también: if not "%variable%"=="" pero no queda tan bien porqué si la variable contiene un " al principio el cmd se confunde con el código, y para eso hay que escribir más

call :length %palabra: =_%

significa que le paso un parametro a :length sustituyendo los espacios por _ lo que no significa que el contenido de la variable no pueda tener espacios, pero es para que no me los elimine al pasarlo por parametro. Ejemplo:
palabra=[espacio][espacio]abc
palabra tiene 5 caracteres

y si comienza con espacio y termina con espacio se borran si llamo a una función (función trim :D). Ejemplo:
call :length %palabra%
hace
call :length   abc
y pasa solo abc

:length
recibe todos los parametros en variable arg y en variable word
variable word redundantemente reemplaza los espacios por _ (aunque ahora pienso que se podría borrar esa línea porque ya viene con el reemplazo desde arriba) establecemos el cont en 0, y luego vamos eliminando un carácter por ciclo repetitivo, y aumentado el cont en 1, cuando ya no queden más letras, tendremos un set word= y la borramos, cuando word ya no está definida salimos del ciclo, y establecemos una variable con el nombre del parametro.length con el contenido de cont.  Ejemplo:

call :length   abc
call :length __abc
set __abc.length=%cont%

Luego cuando se sale de :length pregunta
¿está definida  __abc.length? si así es imprime dicha variable, esta vez ayudado por setlocal enabledelayedexpansion porque antes lo tenía así:
call echo %%%palabra: =_%.length%%
pero si el contenido de la variable comenzaba con un numero, el cmd se confundia al hacer un %1 y no imprimia bien.


Título: Re: Batch - Contar letras de una variable
Publicado por: carlitos.dll en 29 Julio 2008, 21:53 pm
Actualizo el código

Código:
::CarlitoS.dll
::Función que cuenta los carácteres de una variable
@echo off
setlocal enabledelayedexpansion

set /p palabra=Ingrese una palabra con espacios si quiere:

if defined palabra (call :length %palabra: =_%)
if defined %palabra: =_%.length (echo !%palabra: =_%.length!)

pause

goto :eof

:length
set arg=%*
if not defined arg (goto :eof)
set word=%arg%
set /a cont=0
:loop
if not defined word (goto end)
set word=%word:~1%
set /a cont +=1
goto loop
:end
set %arg: =_%.length=%cont%
goto :eof


Título: Re: Batch - Contar letras de una variable
Publicado por: $hyDow en 29 Julio 2008, 23:26 pm
buena explicación
estoy aprendiendo mucho de tus codes


Título: Re: Batch - Contar letras de una variable
Publicado por: carlitos.dll en 29 Julio 2008, 23:46 pm
Soluciono un pequeño bug:
al ingresar "" se muestra en pantalla la salida de set

Solución:
Código:
::CarlitoS.dll
::Función que cuenta los carácteres de una variable
@echo off

set /p palabra=Ingrese una palabra con espacios si quiere:

if defined palabra (call :length %palabra: =_%)
if defined [%palabra: =_%.length] (call echo %%[%palabra: =_%.length]%%)

pause

goto :eof

:length
set arg=%*
if not defined arg (goto :eof)
set word=%arg%
set /a cont=0
:loop
if not defined word (goto end)
set word=%word:~1%
set /a cont +=1
goto loop
:end
set [%arg: =_%.length]=%cont%
goto :eof


Título: Re: Batch - Contar letras de una variable
Publicado por: celticsoft en 16 Junio 2021, 10:39 am
_