Contar caracteres de las líneas de un txt con un batch

Tengo un fichero lista.txt de este modo

JUAN

PEDRO

ANA

MARÍA

Y estoy intentando preparar un bat que me avise de SI EXISTE alguna línea en este fichero que solo contenga una cadena de 3 caracteres, para ello he probado un bat de contar caracteres que funciona muy bien y es este:

@echo off
set cadena=r:\alar
set a=0
set fincadena=0
:lp
call :contador "%%cadena:~%a%,1%%" %a%
if %fincadena%==1 goto :EOF
set /a a=%a%+1
goto lp
:contador
set caracter=%1
set len=%2
if %caracter%=="" (
    if %len%==3 echo cadena de tres
    set fincadena=1
)
goto :EOF

AHORA BIEN, quiero meter esto con un for de este tipo:

for /f "tokens=1" %%g in ('TYPE Copia.lst') do (set cadena=%%g)
Para que se recorra todas las líneas que tiene el fichero lista.txt y me avise de si existe alguna de 3 caracteres, pero no consigo que funcione.

Si me pudierais ayudar os lo agradecería

1 respuesta

Respuesta
1

Respetando básicamente tu rutina de cuenta de caracteres, asumiendo que donde dices Copia. Lst quieres decir lista.txt y con un echo intermedio para que veas lo que va haciendo, esto podría ser lo que quieres:

@echo off
for /f "tokens=1" %%g in ('TYPE lista.txt') do (call :compcuenta %%g)
goto :EOF
:compcuenta
echo Comprobando cadena %1
set cadena=%1
set a=0
set fincadena=0
:lp
call :contador "%%cadena:~%a%,1%%" %a%
if %fincadena%==1 goto :EOF
set /a a=%a%+1 
goto lp
)
:contador
set caracter=%1
set len=%2
if %caracter%=="" (
    if %len%==3 echo %cadena% cadena de tres
    set fincadena=1
)
goto :EOF

¡Gracias! 

Muchas gracias por tu ayuda, funcionó exactamente como yo quería

Buenas tardes.

Estoy tratando de comprender línea a línea tu ejemplo, que como ya de dije funciona perfecto,

Pero hay algo que no entiendo. Si por ejemplo cuando está es sistema analizando una cadena de tres caracteres, cuando se viene de extraer el siguiente caractar al último, que pasamos con el a :contador, siendo este último carácter recogido por set caracter=%1 y comprobado por if %carácter%=="", que la cadena ya se terminó, como es posible que aquí mismo set len=%2 esté con el valor 3, que es el que le marcó el carácter anterior, pues según creo es la cuarta vez que se pasa por :contador

Es evidente que esto no es así, porque funciona todo bien, pero no lo entiendo.

La variable "a" es la que lleva la cuenta de caracteres y se incrementa después de comprobar el final de la cadena, de modo que cuando se han contado los tres caracteres la invocación a la rutina "contador" se hace con "a" valiendo 3 y el carácter leído vacío. En estas condiciones contador activa el indicador de fin de cadena que nos saca del tratamiento de la línea actual e impide que se incremente "a".

Si no lo ves claro me lo dices.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas