Título: DNI Publicado por: Alex_loar en 25 Febrero 2008, 20:50 pm Hola, estoy haciendo el típico programa de calcular la letra del DNI, pero ahora con un archivo de procesamiento por lotes(.bat). Tengo esto:
@echo off echo Introduce un DNI set /p dni= set cadena= "TRWAGMYFPDXBNJZSQVHLCKE" set /a cociente=%dni% / 23 set /a resto=(%dni%-(23* %cociente%))+1 echo El NIF es %cadena%[%resto%] <----------------¿? pause>nul Me falta sacar de la cadena la letra pero no sé como. Tampoco sé si existe alguna función para sacar el resto y evitarme así las variables cociente y resto. A ver si alguien me puede echar una mano. Gracias Título: Re: DNI Publicado por: Stacker en 26 Febrero 2008, 19:19 pm Hola, lo deje así y funciona. Si alguien sabe simplificarlo más:
Código: @echo off -Se calcula el resto en una sola linea. -Con un bucle se van eliminando a la vez un caracter del principio de la cadena y una unidad del resto. -Cuando el resto llega a 1, se coge solamente el primer caracter de la cadena. PD: Con el comando set /? puedes obtener más ayuda para tratar variables en batch. ;) Saludos Título: Re: DNI Publicado por: Alex_loar en 27 Febrero 2008, 01:02 am Hola Stacker, lo primero gracias.
Tengo una duda, acabo de empezar con esto. Podrías explicar lo anterior a partir de la etiqueta. Saludos Álex Título: Re: DNI Publicado por: Stacker en 27 Febrero 2008, 19:45 pm Antes de nada, hay un error: fallaba cuando tenia que mostrar el primer caracter "T".
Código: @echo off Perdón por el primer código, pasa por hacerlo deprisa. :-\ Explicación: La idea es ir eliminando un caracter del principio de la cadena por cada unidad del resto. Y después mostrar el primer caracter de los que queden. if %resto%==0 goto fin, comprueba si el resto es o ha llegado a cero y termina. set /a resto-=1, resta una unidad al resto. set cadena=%cadena:~1,22%, coge 22 (para asegurarnos de abarcar todo) caracteres a partir de la posición 1, es decir todos menos el primero. echo La letra del NIF es %cadena:~0,1%, igual que el anterior, en este caso desde la posición 0 y solamente 1 caracter. La razón de usar este sistema en vez de simplemente: echo La letra del NIF es %cadena:~%resto%,1% - es que devuelve literalmente: cadena:~-n,1 , donde n es el resto. Si alguien sabe evitar esto seria de gran utilidad y simplificaria muchísimo el código. Espero que hayas entendido el código. Saludos Título: Re: DNI Publicado por: Alex_loar en 28 Febrero 2008, 00:53 am Ahora sí ;)
Gracias de nuevo |