(BATCH) Tomar valor de una lista

Iniciado por FerJGS, 9 Agosto 2010, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

FerJGS

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?

maxx93

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 (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
:buscarnumero
set num=0
set /a num=%random:~3,1%
if %num% geq 2 (if %num% leq 9 (goto :sig))
goto :buscarnumero
:sig
set /a nume=%num%-1
set a=0
for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
if !a!==0 (
set preg=%%a
set a=1))
set b=0
for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
if !b!==0 (
set rta=%%a
set b=1))
echo Pregunta %num%
echo %preg%
echo.
echo Escriba Respuesta:
set /p resp=
if %resp%==%rta% (echo Correcto) else (echo Incorrecto)
pause>nul

Salu2.

FerJGS

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)

maxx93

A mi me anda en code  :-\, igual aca hago una corrección
en esta parte
Citar
Código (dos) [Seleccionar]

if %resp%==%rta% (echo Correcto) else (echo Incorrecto)

corrijo...
Código (dos) [Seleccionar]

if "%resp%"=="%rta%" (echo Correcto) else (echo Incorrecto)

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?

FerJGS

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

maxx93

#5
Yo lo haria asi...

Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
:buscarnumero
set num=0
set /a num=%random:~3,1%
if %num% geq 2 (if %num% leq 9 (goto :sig))
goto :buscarnumero
:sig
set /a nume=%num%-1
set a=0
for /f "skip=%nume% delims=" %%a in ('type "preguntas.txt"') do (
if !a!==0 (
set preg=%%a
set a=1))
set b=0
for /f "skip=%nume% delims=" %%a in ('type "respuestas.txt"') do (
if !b!==0 (
set rta=%%a
set b=1))
set c=0
for /f "skip=%nume% delims=" %%a in ('type "respuestas2.txt"') do (
if !c!==0 (
set rta2=%%a
set c=1))
set d=0
for /f "skip=%nume% delims=" %%a in ('type "respuestas3.txt"') do (
if !d!==0 (
set rta3=%%a
set d=1))
echo Pregunta %num%
echo %preg%
echo.
echo Escriba Respuesta:
set /p resp=
set comp=0
if "%resp%"=="%rta%" (set comp=1)
if "%resp%"=="%rta2%" (set comp=1)
if "%resp%"=="%rta3%" (set comp=1)
if %comp%==1 (echo Correcto) else (echo Incorrecto)
pause>nul

Necesitarias dos txt mas el respuestas2.txt y el respuestas3.txt con las respectivas posibles respuestas.
Salu2.

FerJGS

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?

leogtz

Si no me equivoco:
set /a num=%random% %% 701
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

maxx93

Tenes que remplazar
Citar
Código (dos) [Seleccionar]

set /a num=%random:~3,1%
if %num% geq 2 (if %num% leq 9 (goto :sig))

por...
Código (dos) [Seleccionar]

set /a num=%random:~2,3%
if %num% geq 2 (if %num% leq 701 (goto :sig))

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.

FerJGS

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