miércoles, 25 de septiembre de 2013

Abrir y escribir en archivos con lua (IO Library)

Los dos tutoriales anteriores han sido sobre lua,y van a ser muchos mas,en estos momentos ya se aprendio sobre tipos de datos y condicionales con estructuras de seleccion y de repeticion,asi que ya se puede entender perfectamente como abrir un archivo de texto y leerlo,modificarlo o crear uno y escribir en el.

Primero que nada vamos a usar las librerias del moudlo io de lua,Input,Output,entrada y salida,normalmente podriamos hacer un require para llamarlo,pero no es necesario en lua a menos que queramos cambiar el nombre del modulo,pero bueno,para no confundirnos de que modulo estamos usando podemos poner en la cabecera del archivo los require:

require 'io'

O entre comentarios,por si hacemos un programa grande y no recordamos que modulos usamos.

Primero que nada Lua es muy similar a C,ya que la función que vamos a usar se parece a fopen,de C solo que un poco diferente,creamos un objeto desde el momento que abrimos un archivo,y en C creamos un puntero,bueno de todas formas vamos a ver como se hace:

Primero que nada definimos una variable con el nombre del archivo,en lua se recomienda que las variables las comencemos con local,ya que si no es así tendrían ámbito en todo el programa,esta es la forma de privatizar variables,funciones,etc:

local filename = "Arechivo.txt"

Ahora debemos crear un objeto que abra el archivo o lo cree en dado caso,con la funcion(io.open):

file = io.open(filename,modo)

En donde dice filename,es el nombre del archivo,desde una variable o crudo(una string),en modo es el modo de apertura:

w : Abre o crea un archivo en modo escritura(borra el contenido si existe)

r : Abre el archivo en modo lectura

a : Abre el archivo en modo adición(no borra el contenido si existe)

Hay mas.

Ahora debemos hacer lo que queramos:

Para leer un archivo linea por linea debemos iterar con un bucle for,hasta que termine de leer el archivo:

Para leer todo un archivo:

Primero que nada debemos saber que no necesariamente debemos crear un objeto,para trabajar con el,podemos abrilo simplemente pasandole el nombre del archivo:
for line in io.lines(filename) do  print (line) end

Vamos como enumerar las lineas de un archivo

n = 1

for line in io.lines(filename) do 
  io.write(n) 
  print (line)
  n = n + 1 
end

Para escribir en un archivo se pude desviar el STDOUT(salida estandar),ya que normalmente es en el prompt(terminal,consola),podemos desviarlo a un archivo,así:


io.output(io.open(filename,"w"))
Ahora si escribimos durante todo el programa,la orden de io,write,que es con el que escribe en la consola,ahora escribira en el archivo:

io.write("Hola este es un ejemplo\n")
io.write("Desde io.write\n")
Cuando terminemos cerramos el io:

io.close()

De esa manera se puden leer y escribir en archivos,pero no es la mejor manera,la mejor manera es usar un objeto:
file = io.open(filename,modo)
Y luego usar sus funciones de clase,para empezar lua usa notacion de dos puntos(:),para las clases,para recorrer un archivo linea por linea se usa esta sintaxis:

file = io.open(filename,"r")
for line in file:lines() do print(line) end
Para escribir en un archivo de texto se usa esta sintaxis:

file = io.open(filename,"w")

file:write("Texto\n")

Y en ambos casos se debe cerrar el archivo,cuando se termine de hacer lo que se tiene que hacer:

file:close()

Veamos un programa mas complejo:




 #!/usr/bin/env lua  
 repeat   
  io.write("Nombre del archivo: ")  
  filename = io.read()  
 until filename ~= ""  
 n = 1  
 file = io.open(filename,"w")  
 print ("Escribe EOF para salir...")  
 while true do  
  io.write("Linea "..n.." : ")  
  local response = io.read()  
  if response == "EOF" then break end  
  file:write(response.."\n")  
  n = n + 1  
 end  
 io.close()  

Eso es todo :D

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.