Ms-Dos - DNI

 
Vista:

DNI

Publicado por Alejandro (2 intervenciones) el 26/02/2008 01:02:11
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.
A ver si alguien me puede echar una mano.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DNI

Publicado por Antoni Masana (295 intervenciones) el 27/02/2008 06:59:46
Los BAT tienen estos inconvenientes. En unix es mucho mas facil pero como esto no es Unix y hay que sufrir con lo que se tiene ahi va una solución.

@echo off

echo Introduce un DNI
set /p dni=

set /a cociente=%dni% / 23
set /a resto=(%dni%-(23* %cociente%))+1

IF %Resto% == 1 set ID=T
IF %Resto% == 2 set ID=R
IF %Resto% == 3 set ID=W
IF %Resto% == 4 set ID=A
IF %Resto% == 5 set ID=G
IF %Resto% == 6 set ID=M
IF %Resto% == 7 set ID=Y
IF %Resto% == 8 set ID=F
IF %Resto% == 9 set ID=P
IF %Resto% ==10 set ID=D
IF %Resto% ==11 set ID=X
IF %Resto% ==12 set ID=B
IF %Resto% ==13 set ID=N
IF %Resto% ==14 set ID=J
IF %Resto% ==15 set ID=Z
IF %Resto% ==16 set ID=S
IF %Resto% ==17 set ID=Q
IF %Resto% ==18 set ID=V
IF %Resto% ==19 set ID=H
IF %Resto% ==20 set ID=L
IF %Resto% ==21 set ID=C
IF %Resto% ==22 set ID=K
IF %Resto% ==23 set ID=E

echo
echo El NIF es %Dni%%ID%
echo
echo
pause

Nota: En MS-DOS no es lo mismo esto:

set cadena= "TRWAGMYFPDXBNJZSQVHLCKE"

que esto:

set cadena=TRWAGMYFPDXBNJZSQVHLCKE

el resultado en la primera seria esto:

echo [%cadena%]
[ "TRWAGMYFPDXBNJZSQVHLCKE"]

y en la segunda esto:

echo [%cadena%]
[TRWAGMYFPDXBNJZSQVHLCKE]

Por no hablar de los espacios al final de la linea que dan muchos problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DNI

Publicado por A.H.H (43 intervenciones) el 28/02/2008 23:19:07
Hola MUY BUENA respuesta de Antoni Masana!!!!!!

yo lo estube intentando asi pero no pude igual es que no se puede, me gustaria que Antoni Masana si lee esto me saque de la duda:

@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 %dni% tiene la letra %cadena:~%resto%,1
pause>nul

por ejemplo si la variable resto da 21 pues cogeria de la cadena el caracter 21,1
pero si pones la variable %resto% no sale.
%cadena:~%resto,1%

Antoni Masana te dio un buen resultado!!

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DNI

Publicado por Antni Masana (295 intervenciones) el 29/02/2008 08:27:03
Alejandro ya intente lo que propones pero no funciona, la sintaxis deberia ser asi:

%cadena:~%resto%,1%

y el procesador resolver el %resto% y despues lo demas pero no funciona asi.

Las reglas o sintaxis del % no estan explicadas como tales sino como parte de otros comandos (SET, FOR, Parametros BAT).

Lo que se es por experiencia y te aseguro que es complicado de .....

El procesador toma desde el primer % hasta el segundo % y del tercero % al cuarto %:

%cadena:~% Evaluar
resto Texto
%,1% Evaluar

he intenta resolver esto, pero no lo entiende y da un error.

No me preguntes por que es asi, porque no tengo ni idea.

Un saludo desde Barcelona, España.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DNI

Publicado por Alejandro (2 intervenciones) el 29/02/2008 13:56:31
Gracias a los dos. Al final ha quedado así:

@echo off
echo Introduce un NIF
set /p dni=
set cadena=TRWAGMYFPDXBNJZSQVHLCKE
set /a resto=%dni%-(23*(%dni%/23))
:bucle
if %resto%==0 goto fin
set /a resto-=1
set cadena=%cadena:~1,23%
goto bucle
:fin
echo La letra del NIF es %cadena:~0,1%
pause>nul

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DNI

Publicado por A:H:H (2 intervenciones) el 29/02/2008 15:40:15
muy bueno alejandro perfecto era lo que estaba intentando hacer pero me daba siempre error!!!!

perfecto******
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar