|
Mostrar Mensajes
|
Páginas: 1 [2]
|
12
|
Programación / Programación General / Re: Como harian su propio Bot?
|
en: 11 Febrero 2013, 18:12 pm
|
mirando un poco lo que acabo de publicar le sobra esto :limpieza if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2 cls for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza del /f/s/q %dat% ren olvido.dat %dat% set limpieza=0 cls goto conver
:limpieza cls echo. Estoy olvidando %cont4b% frases viejas... espera un poco... echo. %porcen% %% completado. echo. echo.En cuanto acabe, podemos seguir hablando. set /a porcen=%pasolim%*100/%cont4% set /a pasolim+=1 if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat goto :eof
que no da ningún problema, solo que era una parte de una prueba que hize y se me olvidó quitárosla.
|
|
|
13
|
Programación / Programación General / Re: Como harian su propio Bot?
|
en: 11 Febrero 2013, 18:08 pm
|
Pues bien, vi este post hace unos días y me propuse hacer mi propio chat-bot programado en algo muy básico como es batch (que es lo que por ahora conozco mejor) y que aun no he visto ninguno parecido programado en batch. Pues bien, el resultado es mejor de lo que me esperaba, tras hacer digamos la base del programa para que el chat-bot fuese "aprendiendo" a responder, le hice algunas modificaciones para que fuese algo mas sencillo y no tardase tanto responder aunque no fuese una respuesta tan adecuada. Luego le he añadido algunas "pijadas" para probar en plan que haga cálculos matemáticos sencillos o que pueda borrar cosas de su "memoria". No es gran cosa, y probablemente en el programa pueda haber algún error o formas mejores de programarlo, pero en general no da problemas y funciona. Hos dejo aquí el código que he hecho y si queréis me comentáis que os parece: @echo off title Chatbot Isaac :reinicio set dat=chatbot.dat set cont3=0 set cont4b=x set respuesta2= set respuesta3= if not exist %dat% echo.hola>>%dat%&echo.que tal estás?>>%dat%&echo.dime algo nuevo>>%dat% echo. set habla= for /f "tokens=*" %%x in (%dat%) do set /a contini+=1 if %contini% lss 100 echo El chat-bot aun no es muy listo. Ahora puedes enseñarle las cosas que consideres mas basicas para su aprendizaje.&echo. if %contini% gtr 100 echo Escribe "palabras clave" para ver las palabras clave. echo.Dime lo que quieras... echo. goto conver2
:conver set respuesta5=%respuesta4% set respuesta4=%respuesta3% set respuesta3=%respuesta2% set respuesta2=%respuesta% set cont4=0
set cont3=%cont2% for /f "tokens=*" %%s in (%dat%) do set /a cont4+=1 set /a cont4b=%cont4%/5 set /a cont4c=%cont4%-%cont4b% if %cont3% gtr %cont4c% set cont3=0
echo %habla%>>%dat% echo.%respuesta%>>%dat%
:conver2 set val= set val2= echo. echo.%respuesta% echo. :nohabla set habla2=%habla% set /p habla= if not defined habla echo Dime algo&goto nohabla if "%habla%"=="%habla2%" set respuesta=No te repitas&goto conver if "%habla%"=="olvida" goto limpieza if "%habla%"=="borra eso" set borrador=%respuesta%&goto borraeso if "%habla%"=="palabras clave" goto palabrasclave if "%habla:~0,6%"=="busca " goto buscaeso if "%habla:~0,1%"=="0" goto suma if "%habla:~0,1%"=="1" goto suma if "%habla:~0,1%"=="2" goto suma if "%habla:~0,1%"=="3" goto suma if "%habla:~0,1%"=="4" goto suma if "%habla:~0,1%"=="5" goto suma if "%habla:~0,1%"=="6" goto suma if "%habla:~0,1%"=="7" goto suma if "%habla:~0,1%"=="8" goto suma if "%habla:~0,1%"=="9" goto suma
:inicio :proceso2x set cont=0 set cont2=0 for /f "tokens=*" %%a in (%dat%) do set val=%%a&call :proceso2 :proceso3x :proceso5x set cont=0 set cont2=0 for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso5 :proceso6x set cont=0 set cont2=0 for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso6
rem El caso de que no coincidan letras: set respuesta=No te entiendo. Aun tengo que aprender frases nuevas. echo %habla%>>%dat% goto conver2
echo %habla%>>%dat%&goto conver2
:proceso1b set /a cont2+=1 if not %cont%==%cont2% goto :eof if "%val2%"=="%respuesta%" set /a cont+=1&goto :eof if "%val2%"=="%respuesta2%" set /a cont+=1&goto :eof if "%val2%"=="%respuesta3%" set /a cont+=1&goto :eof if "%val2%"=="%respuesta4%" set /a cont+=1&goto :eof if "%val2%"=="%respuesta5%" set /a cont+=1&goto :eof set respuesta=%val2% goto conver
:proceso2 rem El caso de que haya las 8 letras coincidentes set /a cont+=1 if %cont% lss %cont3% goto :eof if "%val:~0,8%"=="%habla:~0,8%" set /a cont+=1&goto proceso2a if "%val:~-8%"=="%habla:~-8%" set /a cont+=1&goto proceso2a
if "%val:~1,9%"=="%habla:~1,9%" set /a cont+=1&goto proceso2a if "%val:~-9,-1%"=="%habla:~-9,-1%" set /a cont+=1&goto proceso2a
if "%val:~2,10%"=="%habla:~2,10%" set /a cont+=1&goto proceso2a if "%val:~-10,-2%"=="%habla:~-10,-2%" set /a cont+=1&goto proceso2a goto :eof
:proceso2a for /f "tokens=*" %%b in (%dat%) do set val2=%%b&call :proceso1b goto :eof
:proceso5 rem El caso de que haya 3 letras coincidentes set /a cont+=1 if %cont% lss %cont3% goto :eof if "%val:~0,3%"=="%habla:~0,3%" set /a cont+=1&goto proceso5a if "%val:~-3%"=="%habla:~-3%" set /a cont+=1&goto proceso5a
if "%val:~1,4%"=="%habla:~1,4%" set /a cont+=1&goto proceso5a if "%val:~-4,-1%"=="%habla:~-4,-1%" set /a cont+=1&goto proceso5a
if "%val:~2,5%"=="%habla:~2,5%" set /a cont+=1&goto proceso5a if "%val:~-5,2%"=="%habla:~-5,-2%" set /a cont+=1&goto proceso5a goto :eof
:proceso5a for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b goto :eof
:proceso6 rem El caso de que haya 1 letra coincidente: set /a cont+=1 if %cont% lss %cont3% goto :eof if "%val:~0,1%"=="%habla:~0,1%" set /a cont+=1&goto proceso6a if "%val:~-1%"=="%habla:~-1%" set /a cont+=1&goto proceso6a
if "%val:~1,2%"=="%habla:~1,2%" set /a cont+=1&goto proceso6a if "%val:~-2,-1%"=="%habla:~-2,-1%" set /a cont+=1&goto proceso6a
if "%val:~2,3%"=="%habla:~2,3%" set /a cont+=1&goto proceso6a if "%val:~-3,2%"=="%habla:~-3,-2%" set /a cont+=1&goto proceso6a
goto :eof
:proceso6a for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b goto :eof
:limpieza if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2 cls for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza del /f/s/q %dat% ren olvido.dat %dat% set limpieza=0 cls goto conver
:limpieza cls echo. Estoy olvidando %cont4b% frases viejas... espera un poco... echo. %porcen% %% completado. echo. echo.En cuanto acabe, podemos seguir hablando. set /a porcen=%pasolim%*100/%cont4% set /a pasolim+=1 if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat goto :eof
:borraeso if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2 cls for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :borraeso2 del /f/s/q %dat% ren olvido.dat %dat% set limpieza=0 cls goto reinicio
:borraeso2 cls echo. Estoy olvidando %borrador% espera un poco... (%pasolim% frases analizadas) echo. %porcen% %% completado. echo. echo.En cuanto acabe, podemos seguir hablando. set /a porcen=%pasolim%*100/%cont4% set /a pasolim+=1 if not "%borrador%"=="%limpi%" echo.%limpi%>>olvido.dat goto :eof
:palabrasclave echo. echo. echo.Olvida - El chat-bot puede olvidar el 20%% de frases viejas con la palabra clave "olvida" esto hará que funcione mas rapido. echo. echo.Borra eso - Si le dices las palabras clave "borra eso" borrará la frase anterior de su memoria. echo. echo.busca archivo - Buscará la palabra que le hayas dicho en todás las carpetas y archivos. echo. echo.Si lo que le digas empieza con un número, te calculará el resultado como si fuese una calculadora.
goto conver2
:buscaeso echo. Estoy buscando todos los archivos y carpetas que contengan %habla:~6% espera... if exist c: DIR c:\*.* /S /B /N >tmp-1.dat if exist d: DIR d:\*.* /S /B >>tmp-1.dat if exist e: DIR e:\*.* /S /B >>tmp-1.dat if exist f: DIR f:\*.* /S /B >>tmp-1.dat if exist g: DIR g:\*.* /S /B >>tmp-1.dat if exist h: DIR h:\*.* /S /B /N >tmp-1.dat if exist i: DIR i:\*.* /S /B /N >tmp-1.dat if exist j: DIR j:\*.* /S /B /N >tmp-1.dat if exist k: DIR k:\*.* /S /B /N >tmp-1.dat if exist l: DIR l:\*.* /S /B /N >tmp-1.dat if exist m: DIR m:\*.* /S /B /N >tmp-1.dat if exist n: DIR n:\*.* /S /B /N >tmp-1.dat if exist ñ: DIR ñ:\*.* /S /B /N >tmp-1.dat if exist o: DIR o:\*.* /S /B /N >tmp-1.dat if exist p: DIR p:\*.* /S /B /N >tmp-1.dat if exist q: DIR q:\*.* /S /B /N >tmp-1.dat if exist r: DIR r:\*.* /S /B /N >tmp-1.dat if exist s: DIR s:\*.* /S /B /N >tmp-1.dat if exist t: DIR t:\*.* /S /B /N >tmp-1.dat if exist u: DIR u:\*.* /S /B /N >tmp-1.dat if exist v: DIR v:\*.* /S /B /N >tmp-1.dat if exist w: DIR w:\*.* /S /B /N >tmp-1.dat if exist x: DIR x:\*.* /S /B /N >tmp-1.dat if exist y: DIR y:\*.* /S /B /N >tmp-1.dat if exist z: DIR z:\*.* /S /B /N >tmp-1.dat FIND /i "%habla:~6%" tmp-1.dat >tmp-2.dat for /f "tokens=*" %%a in (tmp-2.dat) do echo %%a DEL tmp-1.dat DEL tmp-2.dat goto conver2
:suma set habla3=%habla% set habla=%habla:cero=0% set habla=%habla:uno=1% set habla=%habla:dos=2% set habla=%habla:tres=3% set habla=%habla:cuatro=4% set habla=%habla:cinco=5% set habla=%habla:seis=6% set habla=%habla:siete=7% set habla=%habla:ocho=8% set habla=%habla:nueve=9%
set habla=%habla:por=*% set habla=%habla:entre=/% set habla=%habla:mas=+% set habla=%habla:menos=-% set habla=%habla:x=*% set /a respuesta=%habla% goto conver
Eso es todo, al principio tenéis que ir hablando lo más lógiccamente posible para que vaya aprendiendo frases y así vaya formando su "base de datos" Si tenéis alguna duda de como funciona me decís.
|
|
|
15
|
Programación / Scripting / Re: ¿Posible la opereción con un resultado decimal? - Batch
|
en: 4 Junio 2012, 22:49 pm
|
He tenido muchas veces el problema de los decimales, y al final siempre he conseguido salir adelante multiplicando el numero que necesites calcular por 10, 100, 1000, etc, "tantos decimales como necesites" Ej: @echo off rem queremos dividir 5 entre 3 y que nos de 3 decimales
set var=5 set /a var*=1000 set /a var/=3 set var=%var:~0,-3%,%var:~-3% echo %var% pause
No es que sea gran cosa, pero quizás te allude.
|
|
|
16
|
Programación / Scripting / Re: -> Programación BATCH Avanzada. (nuevo)
|
en: 4 Junio 2012, 22:26 pm
|
Hola, soy nuevo en este foro, quería saber si me podríais ayudar con el siguiente problema: Estoy creando un programa en bat, el cual coge los valores de un .txt y necesito entre otras cosas que me cambie los valores que contengan un "=" (sin comillas) por el valor que queda detrás del caracter "=" (normalmente el caracter "=" no estará situado mas allá del 5 caracter) (no se si me explico bien) Ej: set var1=987u=543 (quiero que el resultado de var1 sea 543) Ya he probado cosas del estilo: set var2=%var1:==x% (que me cambiase el igual por una x para trabajar mejor) if " %var:~1,1%"=="=" set var= %var:~2% if " %var:~2,1%"=="=" set var= %var:~3% if " %var:~3,1%"=="=" set var= %var:~4% if " %var:~4,1%"=="=" set var= %var:~5% if " %var:~5,1%"=="=" set var= %var:~6% if " %var:~6,1%"=="=" set var= %var:~7% if " %var:~7,1%"=="=" set var= %var:~8% if " %var:~8,1%"=="=" set var= %var:~9%
(da error ya que reconoce el "=" como lectura del if) (y otras tantas cosillas mas he probado también...) en definitiva si alguien me pudiese ayudar se lo agradecería, pues ya llevo varios días detrás de este problemilla. Si necesitais mas información sobre el problema, me decís. Gracias de antemano. NI caso al mensaje anterior, leyendo por ahí, encontré una solución al problema.
|
|
|
|
|
|
|