Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch / Bash-Shell

Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 25-may-2013, 20:53   #1
Miembro
 
Avatar de Debork
 
Fecha de Ingreso: noviembre-2011
Ubicación: In my life.
Amigos 5
Mensajes: 128
Gracias: 15
Agradecido 30 veces en 26 mensajes.
Smile [Batch/Bash] Convertir archivo

Hola muy buenas, hice un pequeño programa, por aburrimiento porque me di cuenta que la letra del DNI, no es aleatoria sino que sigue un algoritmo, y al tomar la información necesaria me puse a hacerlo, y lo que quedo fue esto:

Código:
@echo off
title Calculador de Letra DNI

:inicio
cls
set var=
echo Introduzca su numero de DNI:
set /p var=^>^>^> 
echo.
if not defined var goto :inicio
if defined var goto :resta

:resta
set /a res = %var% / 23
set /a resu = %res% * 23
set /a rest = %var% - %resu%
if %rest% == 0 echo Letra: T && echo. && echo Su DNI: %var%T
if %rest% == 1 echo Letra: R && echo. && echo Su DNI: %var%R
if %rest% == 2 echo Letra: W && echo. && echo Su DNI: %var%W
if %rest% == 3 echo Letra: A && echo. && echo Su DNI: %var%A
if %rest% == 4 echo Letra: G && echo. && echo Su DNI: %var%G
if %rest% == 5 echo Letra: M && echo. && echo Su DNI: %var%M
if %rest% == 6 echo Letra: Y && echo. && echo Su DNI: %var%Y
if %rest% == 7 echo Letra: F && echo. && echo Su DNI: %var%F
if %rest% == 8 echo Letra: P && echo. && echo Su DNI: %var%P
if %rest% == 9 echo Letra: D && echo. && echo Su DNI: %var%D
if %rest% == 10 echo Letra: X && echo. && echo Su DNI: %var%X
if %rest% == 11 echo Letra: B && echo. && echo Su DNI: %var%B
if %rest% == 12 echo Letra: N && echo. && echo Su DNI: %var%N
if %rest% == 13 echo Letra: J && echo. && echo Su DNI: %var%J
if %rest% == 14 echo Letra: Z && echo. && echo Su DNI: %var%Z
if %rest% == 15 echo Letra: S && echo. && echo Su DNI: %var%S
if %rest% == 16 echo Letra: Q && echo. && echo Su DNI: %var%Q
if %rest% == 17 echo Letra: V && echo. && echo Su DNI: %var%V
if %rest% == 18 echo Letra: H && echo. && echo Su DNI: %var%H
if %rest% == 19 echo Letra: L && echo. && echo Su DNI: %var%L
if %rest% == 20 echo Letra: C && echo. && echo Su DNI: %var%C
if %rest% == 21 echo Letra: K && echo. && echo Su DNI: %var%K
if %rest% == 22 echo Letra: E && echo. && echo Su DNI: %var%E
echo.
echo Pulse 'Enter' para salir...
pause >nul
exit
  
Bueno y en el code no tengo ningun problema, el problema que tengo es que lo quiero pasar a Bash, pero no me sale siempre me sale errores, aparte de que apenas tengo conocimientos sobre el lenguaje.

Me gustaria que alguien me ayudase para pasarlo a Bash..

Un saludo muchas gracias
__________________
Saludos!

Tuenti:
Debork Anonymous
Twitter: DeborkEsp


"Si quieres sobrevivir a una guerra, conviértete en guerra."

¿ Quieres ganar dinero en Internet ? Pulsame
Debork está desconectado   Responder Citando
Antiguo 27-may-2013, 07:49   #2
Mod recien llegado
 
Fecha de Ingreso: enero-2010
Amigos 10
Mensajes: 1.407
Gracias: 646
Agradecido 372 veces en 323 mensajes.
Predeterminado Respuesta: [Batch/Bash] Convertir archivo

Buenas amigo, en principio lo primero que te indicaré es como mejorar las líneas de código de batch y luego de que entiendas las modificaciones te ayudaré explicando cómo puedes pasarlo a bash
Primero, estoy viendo muchos IF para operaciones repetitivas.
Ahora te pregunto, ¿Sabes que es un Array? Si lo sabes puedes saltarte este paso, si no léelo.
En programación existe un tipo de variable que se llama Array.
Un array no es más que un contenedor de muchos valores los cuales están identificados/separados por un índice numérico correlativo.
Para que entiendas los ejemplos del Array los pondré en pseudocodigo
Vamos a suponer que tenemos un Array con nombre:
Código:
 Array debork
  
Ahora queremos asignarle valor a ese Array:
Código:
 
debork[0]=hola 
debork[1]=adios
  
Para visualizar el contenido de un Array
Código:
 
Mostrar debork[0]
Mostrar debork[1]
  
No sé si entiendes lo que estoy intentando de explicarte (cualquier cosa indicas).




BATCH no provee de este tipo de variables, lo que ahora vamos a realizar es intentar de emular este sistema. Teniendo en cuenta que el valor de los cálculos matemáticos que realizas para obtener el nº de la letra es correlativo empezando siempre desde 0, lo primero que debemos hacer es lo siguiente:
Código:
::Define var
set "debork[0]=T"
set "debork[1]=R"
set "debork[2]=W"
set "debork[3]=A"
set "debork[4]=G"
set "debork[5]=M"
set "debork[6]=Y"
set "debork[7]=F"
set "debork[8]=P"
set "debork[9]=D"
set "debork[10]=X"
set "debork[11]=B"
set "debork[12]=N"
set "debork[13]=J"
set "debork[14]=Z"
set "debork[15]=S"
set "debork[16]=Q"
set "debork[17]=V"
set "debork[18]=H"
set "debork[19]=L"
set "debork[20]=C"
set "debork[21]=K"
set "debork[22]=E"
::End Define var
  
Ahora debemos habilitar la expansión de variables retardada para indicarle a la cmd que primero debe expandir/mostrar el valor de la variable %rest% y luego expandir el valor de la variable(emulación Array) debork. También he añadido una comprobación para el resultado de la operación matemática.
Código:
:resta
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set /a res = %var% / 23
set /a resu = %res% * 23
set /a rest = %var% - %resu%
if %rest% GTR 22 ( goto :Error )
echo "
echo. Su DNI: %debork[!rest!]%
echo Pulse 'Enter' para salir...
pause >nul
exit
:Error
echo.La longitud del numero introducido es incorrecta
echo Pulse 'Enter' para salir...
pause >nul
exit
  
Ahora el código quedaría de la siguiente manera:
Código:
@echo off
title Calculador de Letra DNI
::Define var
set "debork[0]=T"
set "debork[1]=R"
set "debork[2]=W"
set "debork[3]=A"
set "debork[4]=G"
set "debork[5]=M"
set "debork[6]=Y"
set "debork[7]=F"
set "debork[8]=P"
set "debork[9]=D"
set "debork[10]=X"
set "debork[11]=B"
set "debork[12]=N"
set "debork[13]=J"
set "debork[14]=Z"
set "debork[15]=S"
set "debork[16]=Q"
set "debork[17]=V"
set "debork[18]=H"
set "debork[19]=L"
set "debork[20]=C"
set "debork[21]=K"
set "debork[22]=E"
::End Define var
:inicio
cls
set "var="
echo Introduzca su numero de DNI:
set /p "var=>>>"
echo.
if not defined var goto :inicio
if defined var goto :resta
:resta
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set /a res = %var%-((%var% / 23)*23)
if %res% GTR 22 ( goto :Error )
echo. Su DNI: %var%-!debork[%res%]! 
echo Pulse 'Enter' para salir...
pause >nul
exit
:Error
echo.La longitud del numero introducido es incorrecta
echo Pulse 'Enter' para salir...
pause >nul
exit
  
Comenta si entiendes todo lo que he explicado y que no para intentar de explicar mejor. Luego de que lo entiendas, te explicaré como pasarlo a bash(shell script)

Última edición por cuban; 28-may-2013 a las 05:18
cuban esta en línea ahora   Responder Citando
El Siguiente Usuario Agradeció a cuban Por Este Mensaje:
Debork (27-may-2013)
Antiguo 27-may-2013, 12:55   #3
Miembro
 
Avatar de Debork
 
Fecha de Ingreso: noviembre-2011
Ubicación: In my life.
Amigos 5
Mensajes: 128
Gracias: 15
Agradecido 30 veces en 26 mensajes.
Predeterminado Respuesta: [Batch/Bash] Convertir archivo

A si, los arrays, he oído hablar sobre ello pero nunca los he usado :P.

He probado el scrit, y no me funciona, meto los datos, y me sale:

Código:
Introduzca su numero de DNI:
>>> *Mi DNI*


Su DNI:
Pulse 'Enter' para salir...
  
__________________
Saludos!

Tuenti:
Debork Anonymous
Twitter: DeborkEsp


"Si quieres sobrevivir a una guerra, conviértete en guerra."

¿ Quieres ganar dinero en Internet ? Pulsame
Debork está desconectado   Responder Citando
Antiguo 27-may-2013, 16:33   #4
Mod recien llegado
 
Fecha de Ingreso: enero-2010
Amigos 10
Mensajes: 1.407
Gracias: 646
Agradecido 372 veces en 323 mensajes.
Predeterminado Respuesta: [Batch/Bash] Convertir archivo

lo postee sin probarlo, mañana lo corrijo y lo dejo funcionando, ya que estaba en el trabajo.
cuban esta en línea ahora   Responder Citando
Antiguo 27-may-2013, 16:46   #5
Miembro
 
Avatar de Debork
 
Fecha de Ingreso: noviembre-2011
Ubicación: In my life.
Amigos 5
Mensajes: 128
Gracias: 15
Agradecido 30 veces en 26 mensajes.
Predeterminado Respuesta: [Batch/Bash] Convertir archivo

Vale, muchas gracias.
__________________
Saludos!

Tuenti:
Debork Anonymous
Twitter: DeborkEsp


"Si quieres sobrevivir a una guerra, conviértete en guerra."

¿ Quieres ganar dinero en Internet ? Pulsame
Debork está desconectado   Responder Citando
Antiguo 28-may-2013, 05:04   #6
Mod recien llegado
 
Fecha de Ingreso: enero-2010
Amigos 10
Mensajes: 1.407
Gracias: 646
Agradecido 372 veces en 323 mensajes.
Predeterminado Respuesta: [Batch/Bash] Convertir archivo

Ahora que funciona, analízalo y teniendo en cuenta lo explicado anteriormente indica si lo entiendes.
Código:
@echo off
title Calculador de Letra DNI
::Define var
set "debork[0]=T"
set "debork[1]=R"
set "debork[2]=W"
set "debork[3]=A"
set "debork[4]=G"
set "debork[5]=M"
set "debork[6]=Y"
set "debork[7]=F"
set "debork[8]=P"
set "debork[9]=D"
set "debork[10]=X"
set "debork[11]=B"
set "debork[12]=N"
set "debork[13]=J"
set "debork[14]=Z"
set "debork[15]=S"
set "debork[16]=Q"
set "debork[17]=V"
set "debork[18]=H"
set "debork[19]=L"
set "debork[20]=C"
set "debork[21]=K"
set "debork[22]=E"
::End Define var
:inicio
cls
set "var="
echo Introduzca su numero de DNI:
set /p "var=>>>"
echo.
if not defined var goto :inicio
if defined var goto :resta
:resta
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set /a res = %var%-((%var% / 23)*23)
if %res% GTR 22 ( goto :Error )
echo. Su DNI: %var%-!debork[%res%]! 
echo Pulse 'Enter' para salir...
pause >nul
exit
:Error
echo.La longitud del numero introducido es incorrecta
echo Pulse 'Enter' para salir...
pause >nul
exit
  
Tested on win7x64
Pd: Recuerda:
Uno realmente no se sabe nada hasta que no pueda explicárselo a su abuela. Albert Einstein


Editado: Para el tema de pasarlo a bash o shell script deberías crear un tema en esta sección ya que es la correcta

Otra cosa que no has tenido en cuenta, si el usuario introduce algo que no sea numero????? o que no tenga la longitud requerida????????????
debes controlar eso tanto en batch como en bash

Última edición por cuban; 28-may-2013 a las 09:59
cuban esta en línea ahora   Responder Citando
El Siguiente Usuario Agradeció a cuban Por Este Mensaje:
Debork (28-may-2013)
Respuesta

Etiquetas
bash, bath, calculadora., dni, letra

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tutorial Programación Batch - completo - GUN$ Batch / Bash-Shell 5 04-dic-2011 18:42
FATAL ERROR 001b 0x7c92b21a 0x00000010 c0p3rn1c Sistemas Operativos Windows 1 15-dic-2010 23:59
Acciones sobre archivos de texto - by RockOx SMARTGENIUS Batch / Bash-Shell 6 05-feb-2009 17:50



Portal Hacker
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0