En esta lección vamos a aprender cómo leer y escribir en archivos. Puede ser muy útil a la hora de hacer juegos. Puedes usarlo para ejecutar código de otros archivos, al igual que para guardar información en ficheros, tal como mejores marcas, partidas guardadas, estadísticas de jugadores, etc. ¡Empecemos!
Lo primero es mirar un sencillo comando llamado dofile. Este comando leerá código de otro fichero e inmediatamente lo ejecutará.
dofile("./test.lua")
El comando es tan simple como eso. Fíjate que "./" significa que el archivo está en el mismo directorio. Si estuviera en un subdirectorio usaríamos esto:
dofile("./archivos/test.lua")
Así, si nuestro archivo test.lua contiene este código:
jugadorx = 10 jugadory = 20 enemigox = 40 enemigoy = 50
entonces tan pronto como llamamos al archivo con el comando dofile, esas variables serán declaradas. No es necesario usar archivos con extensión "lua", también valdrían archivos "txt" u otros.
Leer una sola línea de un archivo
Imaginemos que tenemos un archivo con varias líneas de texto y tú quieres leer sólo una y mostrarla por pantalla. Podemos usar el comando io.open() para abrir el archivo y leer de él. Este comando se escribe así: io.open(nombre_archivo, modo). El modo que usaremos para leer será r. Como referencia muestro la lista de todos los modos disponibles:
Lo primero que haremos será abrir el archivo y almacenarlo en una variable.
archivo = io.open("testLectura.txt","r")
Nuestro archivo testLectura.txt ha sido abierto y está listo para el modo lectura. Ahora usaremos el comando read() para leer una sola línea del archivo y la guardaremos en otra variable.
nuestraLinea = archivo:read()
Esto leerá la primera línea de nuestro archivo de texto. La próxima vez que usemos el comando read() leerá la segunda línea y así sucesivamente. Fíjate que usamos el nombre de nuestra variable con la que hemos abierto el fichero. También hay argumentos que puedes usar con archivo.read(). IMPORTANTE: fíjate que antes hemos visto archivo:read() y ahora estamos hablando de archivo.read(). Puedes poner cualquiera de los siguientes argumentos dentro de los paréntesis con comillas.
Después de leer nuestra línea, tenemos que cerrar el fichero abierto así:
archivo:close()
Ahora para mostrar nuestra línea por pantalla, simplemente usaremos:
screen:print(10,10,nuestraLinea,blanco)
Leer todas las líneas
Para leer todas las líneas de un archivo podemos usar la misma técnica con un for. Fíjate:
y = 10 archivo = io.open("testLectura.txt","r") for linea in archivo:lines() do y = y + 10 screen:print(100,y,linea,blanco) end archivo:close()
Escribir en archivos (sobreescribir)
Escribir en archivos se hace de la misma manera. Nuestro primer método será sobreescribiendo cualquier cosa que estuviera en el archivo anteriormente:
archivo = io.open("testLectura.txt","w") archivo:write("hola") archivo:close()
Fíjate que usamos el modo w en vez del r ya que estamos escribiendo, no leyendo. Usamos archivo:write() con el texto que queremos escribir en el archivo dentro del paréntesis entrecomillado. También puedes usar una variable en vez del texto, en este caso no llevaría comillas. Ej:
archivo = io.open("testLectura.txt","w") miTexto = "hola de nuevo" archivo:write(miTexto) archivo:close()
Escribir en archivos (añadir)
Puedes usar el modo añadir y así el texto será añadido al final del texto existente, en vez de borrarlo todo. Se hace exactamente igual que el modo w excepto que hay que poner a. Mira:
archivo = io.open("testLectura.txt","a") miTexto = "\nhola una vez más" archivo:write(miTexto) archivo:close()
¿Notas algo distinto? En la variable miTexto hemos añadido \n dentro de la cadena de texto. Este comando es un salto de línea y hace que el texto vaya a la siguiente línea cuando lo escribimos en nuestro archivo. Puede aparecer en tu archivo un pequeño cuadrado, pero técnicamente eso es una nueva línea. Este comando se usa también en C/C++.
Intenta usar lo que acabas de aprender aquí haciendo un pequeño programa por tu cuenta.
Comentarios
No carga con ./
estoy cargando una imagen así:
tengo el fondo en la misma carpeta que el luaplayer.exe y que mostrarfondo.lua
pero no me funciona
Qué he hecho mal?
LuaDev
Definitivamente luadev es lo mejor que hay.
que error te da??
si está en el mismo directorio que el script.lua, prueba con:
fondo = Image.load("fondo.png")
Hay un problema.
Cuando quiero añadir dofile("newfile.lua") me sale un error ')'.
Pones
Pones eso:
archivo:write(dofile("newfile.lua"))
o eso:
archivo:write('dofile("newfile.lua")')
Gracias, me va.
¿Y ahora cómo pongo para que escriba en una línea concreta?
Dudas !
Y si yo quiero que ver una fila del mismo texto, como lo haria ?
Ej:
1- juan compro un coche rojo.
2- Pero pedro lo queria azul
3- Donde a juana le gusto el coche rojo.
Osea suponiendo que yo solo quiero leer solamente una linea del bloc de nota y no verla todas a la vez.
Saludo !!!
...
Este tutorial acaba de alegrarme un poquito más la vida. POR FIN funciona el código que he estado toda la tarde programando...
GRACIAS :D
como hago para abrir una
como hago para abrir una imagen en el menu de juego miren el codigo
if pad:cross() and mActual == 3 then
donde quiero que habra la imagen lo cual nose como xD
end
Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP
hola no se ven las letras
blanco = Color.new(255,255,255)
archivo = io.open("testLectura.txt","r")
nuestraLinea = archivo:read()
archivo:close()
screen:print(10,10,nuestraLinea,blanco)
while true do
end
abro el script y se queda en negro nose que hice mal
Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP
as easy as this: blanco =
as easy as this:
blanco = Color.new(255,255,255)
archivo = io.open("testLectura.txt","r")
nuestraLinea = archivo:read()
archivo:close()
while true do
screen:print(10,10,nuestraLinea,blanco)
screen.waitVblankStart()
screen:flip()
end
ayuda
hola a todosss
miren e echo esto :
blanco = Color.new(255,255,255)
archivo = io.open("prueba.txt","r")
nuestraLinea = archivo:read()
archivo:close()
screen:print(10,10,nuestraLinea,blanco)
abro el script y se me cierra
nose donde esta el error
ayudaa
mm
si solo has puesto eso, es mi opinion, que tambien estoy aprendiendo,
te faltaría el bucle
while true do
...
...
screen...
..
end
dofile
Una pregunta, ¿se puede hacer un dofile a un eBoot.pbp de otra aplicación que no esté programada en LUA?
como leo
el nombre de una carpeta ubicada en la memory stick y como le cambio el nombre bueno gracias de antemano
este tutorial
es para cambiar de nivel, de menu, etc???
Realmente
con la escritura de ficheros puedes hacer infinidad de cosas, todo lo que se ocurra y con ellos te sirva. (Siempre de un modo racional, no te pases creando .txt, creo que me exlico :P)
Puedes guardar toda la info que se te ocurra
Saludos
Ayuda por favor
Miren si quiero que cuando ( un ejemplo ) junto 100 puntos en el nivel 1 del juego quiero que lea el archivo que es el nivel 2 que comandos uso
Saludos
Duda...
Esto no lo pillo (Vamos, supongo que es un fallo a la hora de escribirlo)
"IMPORTANTE: fÃjate que antes hemos visto archivo:read() y ahora estamos hablando de archivo.read(). Puedes poner cualquiera de los siguientes argumentos dentro de los paréntesis con comillas."
Dice que antes hemos visto archivo:read() y ahora hablamos de archivo:read(). A qué se refiere en el caso en el que está equivocado?
Muy bien explicado.
Muy bien explicado.
si señor un 10 , plas , plas , plas
un saludo
Spirax
xD
ya veo que ya puedes publicar tus tutos en el lugar adecuado, jeje. Ahora que habia yo aprendido a pasartelos aqui y le habia quitado a Abis esa tarea que tanto le gusta....
Un saludo compañero.
Para recibir ayuda más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda revisar el Manual del perfecto forero y las Normas de la Comunidad.
SÃ, ya ves que he
SÃ, ya ves que he promocionado de Colaborador a Editor :P Además Abismo me enseño a publicarlo correctamente y posteriormente Niteman me aclaró algunas dudillas, asà que con esos 2 maestros es imposible no aprender :P
Pues bueno, un tuto más, bastante interesante, creo yo. Todos a programar en LUA!!!