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 _
|