elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (BATCH) Tomar valor de una lista
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: (BATCH) Tomar valor de una lista  (Leído 8,879 veces)
FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
(BATCH) Tomar valor de una lista
« en: 9 Agosto 2010, 00:30 am »

Hola amigos...mi pregunta es la siguiente... Necesito que batch tome un número aleatorio, y que según ese número ç(que lo puedo sacar perfectamente con %random%...según ese número tome de una lista de txt un valor u otro para la variable...Y que la respuesta sea otro elemento de la lista.

por ejemplo yo tengo en un txt una lista con preguntas, y quiero que me coja una pregunta de forma aleatoria y se tome como valor de la variable. y después...que la respuesta se corresponda con otro elemento de la lista

algo como

número al azar %(random)
set preg=línea 5 de preguntas.txt
set resp=linea 5 de respuestas.txt
If preg=resp goto pregunta2

¿Cómo hago para que pueda tomar esos valores?


En línea

maxx93

Desconectado Desconectado

Mensajes: 99


Lo imposible es la ignorancia de lo posible


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #1 en: 9 Agosto 2010, 02:53 am »

Aca tome a random un valor de una cifra y adelante una condicion para que el random no sobrepase el numero de preguntas, en el ejemplo preguntas.txt son las preguntas y respuestas.txt son las respuestas y son en total 9 preguntas.

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :buscarnumero
  4. set num=0
  5. set /a num=%random:~3,1%
  6. if %num% geq 2 (if %num% leq 9 (goto :sig))
  7. goto :buscarnumero
  8. :sig
  9. set /a nume=%num%-1
  10. set a=0
  11. for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
  12. if !a!==0 (
  13. set preg=%%a
  14. set a=1))
  15. set b=0
  16. for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
  17. if !b!==0 (
  18. set rta=%%a
  19. set b=1))
  20. echo Pregunta %num%
  21. echo %preg%
  22. echo Escriba Respuesta:
  23. set /p resp=
  24. if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
  25. pause>nul
  26.  
Salu2.


En línea

FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #2 en: 9 Agosto 2010, 16:52 pm »

ya veo, bueno me falla una cosa y es que me saca dos bveces la pregunta, y cuando pongo la respuesta me sale "incorrecto". ¿Por qué? (he creado un txt con las preguntas y otro con las respuestas con sus nombres respectivos)
En línea

maxx93

Desconectado Desconectado

Mensajes: 99


Lo imposible es la ignorancia de lo posible


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #3 en: 9 Agosto 2010, 19:34 pm »

A mi me anda en code  :-\, igual aca hago una corrección
en esta parte
Citar
Código
  1. if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
  2.  
corrijo...
Código
  1. if "%resp%"=="%rta%" (echo Correcto) else (echo Incorrecto)
  2.  
Ya que si es una oracion la respuesta, antes al tener espacio mandaba error y terminaba el bat.
Y con respecto a que te aparece incorrecto, quizas es que no estas escribiendo la respuesta en forma textual, osea igual que como esta en el txt.
A que te referis con que te saca dos vaces la pregunta?
En línea

FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #4 en: 9 Agosto 2010, 21:15 pm »

Nada, tranquilos, ya me funciona. Ahora resulta que las preguntas son millones, entonces tengo que separarlos en varios bat, y me gustaría crear botones, resulta que no tengo mouse.exe ni click.exe para lo del manejo del ratón.

Y otra cosa...¿Puedo hacer que tres de esas respuestas sean correctas?

Por ejemplo si me saca la pregunta 1, que haya tres respuestas correctas...¿se puede hacer? muchas gracias
En línea

maxx93

Desconectado Desconectado

Mensajes: 99


Lo imposible es la ignorancia de lo posible


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #5 en: 9 Agosto 2010, 23:35 pm »

Yo lo haria asi...

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :buscarnumero
  4. set num=0
  5. set /a num=%random:~3,1%
  6. if %num% geq 2 (if %num% leq 9 (goto :sig))
  7. goto :buscarnumero
  8. :sig
  9. set /a nume=%num%-1
  10. set a=0
  11. for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
  12. if !a!==0 (
  13. set preg=%%a
  14. set a=1))
  15. set b=0
  16. for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
  17. if !b!==0 (
  18. set rta=%%a
  19. set b=1))
  20. set c=0
  21. for /f "skip=%nume% delims=" %%a in ('type "respuestas2.txt"') do (
  22. if !c!==0 (
  23. set rta2=%%a
  24. set c=1))
  25. set d=0
  26. for /f "skip=%nume% delims=" %%a in ('type "respuestas3.txt"') do (
  27. if !d!==0 (
  28. set rta3=%%a
  29. set d=1))
  30. echo Pregunta %num%
  31. echo %preg%
  32. echo Escriba Respuesta:
  33. set /p resp=
  34. set comp=0
  35. if "%resp%"=="%rta%" (set comp=1)
  36. if "%resp%"=="%rta2%" (set comp=1)
  37. if "%resp%"=="%rta3%" (set comp=1)
  38. if %comp%==1 (echo Correcto) else (echo Incorrecto)
  39. pause>nul
  40.  
Necesitarias dos txt mas el respuestas2.txt y el respuestas3.txt con las respectivas posibles respuestas.
Salu2.
« Última modificación: 9 Agosto 2010, 23:39 pm por maxx93 » En línea

FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #6 en: 10 Agosto 2010, 01:41 am »

Mmmn...interesante, funciona, muchas gracias...Ahora tengo un problema...

En cada txt hay aproximadamente 700 opcione, más bien más.

Como ahs puesto set a num=%random:~3,1% solo me coge núemros muy pequeños

Si pongo set num=%random% y set /a num=%random% se me cierra la consola y el bat no va...¿cómo hago para que el número esté entre 700 posibilidades?
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: (BATCH) Tomar valor de una lista
« Respuesta #7 en: 10 Agosto 2010, 01:58 am »

Si no me equivoco:
Código:
set /a num=%random% %% 701
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
maxx93

Desconectado Desconectado

Mensajes: 99


Lo imposible es la ignorancia de lo posible


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #8 en: 10 Agosto 2010, 01:59 am »

Tenes que remplazar
Citar
Código
  1. set /a num=%random:~3,1%
  2. if %num% geq 2 (if %num% leq 9 (goto :sig))
  3.  
por...
Código
  1. set /a num=%random:~2,3%
  2. if %num% geq 2 (if %num% leq 701 (goto :sig))
  3.  
En donde puse 701 pone el numero de lineas del archivo, una aclaracion que se me paso de largo es que la primera opcion nunca sale asi que escribi cualquier cosa en la primera linea y en donde puse 701 se refiere a 700 preguntas. Salu2.
En línea

FerJGS

Desconectado Desconectado

Mensajes: 75


Ver Perfil
Re: (BATCH) Tomar valor de una lista
« Respuesta #9 en: 10 Agosto 2010, 12:41 pm »

Gracias Leo, ahora sí que me saca de todos los valores... Pero tranquilos, que aún tengo más problemas....En el momento que introduzco la respuesta se me cierra la consola con un error, se cierra tan rápido que no sé que error es, pero creo que he alcanzado a leer "No se esperaba (algo) en este momento.... Podríais corregir mi código chicos?
Citar
@echo off
@mode con cols=90 lines=25
setlocal enabledelayedexpansion
:start
Color F9
Echo Puede salir cerrando la consola con el bot¢n X.
set num=0
set /a num=%random% %% 701
if %num% geq 2 (if %num% leq 700 (goto :sig))
goto :buscarnumero
:sig
set /a nume=%num%-1
set a=0
for /f "skip=%nume% delims=" %%a in ('type "Pre.txt"') do (
if !a!==0 (
set preg=%%a
set a=1))
set b=0
for /f "skip=%nume% delims=" %%n in ('type "Res.txt"') do (
if !b!==0 (
set rta=%%n
set b=1))
echo Nombre el i¢n %preg%
echo.
echo Escriba la respuesta:
set /p resp=
if %resp%==%rta% (goto bien) else (goto mal)
:bien
colous 10 15 13,10 "$201$205$205$205$205$205$205$205$205$205$205$187"
colous 10 15 13,11 "$186 Correcto $186"
colous 10 15 13,12 "$200$205$205$205$205$205$205$205$205$205$205$188"
pause>nul
cls
goto start
:mal
colous 10 15 13,10 "$201$205$205$205$205$205$205$205$205$205$205$205$205$187"
colous 10 15 13,11 "$186 Incorrecto $186"
colous 10 15 13,12 "$200$205$205$205$205$205$205$205$205$205$205$205$205$188"
pause>nul
cls
goto start
exit
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines