Bienvenidos sean a este post, hoy hablaremos sobre una de las patas de todos los lenguajes de programacion como es la posibilidad de escribir informacion en archivos para poder tenerlos de forma persistente, cuando vimos descripcion de datos en este post hablamos de que los constructores de tablas proveen una alternativa interesante para los formatos de archivos, con un poco de trabajo extra cuando escribimos datos la lectura se vuelve trivial, esta tecnica consiste en escribir nuestro archivo de datos como codigo de Lua que al momento de correr construye la informacion dentro del programa, y con constructores de tablas estos chunks puede parecer mas un archivo de datos planos.

Anuncios

Vamos a suponer el siguiente ejemplo, si nuestro archivo de datos esta en un formato predefinido (como CSV o XML) tenemos poca opcion, sin embargo si vamos a crear un archivo para nuestro uso propio podemos usar constructores de Lua como nuestro formato, y en este formato representamos cada registro de dato como un constructor de Lua, por ejemplo en lugar de escribir la informacion de la siguiente forma:

Adam Boduch,Learning JQuery 3,PACKT,2017
Roberto Ierusalimschy,Programming in Lua,lua.org,2006

La escribimos de la siguiente forma:

Entrada{"Adam Boduch",
	"Learning JQuery 3",
	"PACKT",
	2017 }
Entrada{"Roberto Ierusalimschy",
	"Programming in Lua",
	"lua.org",
	2006 }
Anuncios

Recordemos que Entrada{ codigo } es igual a Entrada({ codigo }) lo cual es basicamente una llamada a la funcion Entrada con una tabla como su argumento asi que la parte previa de datos es un programa de Lua, para leer ese archivo solo debemos correrlo con una definicion sensata para Entrada, veamos el siguiente ejemplo:

local contar = 0
function Entrada(_) contar = contar + 1 end
dofile("datos")
print("Numero de entradas: " .. contar)

Con este codigo contaremos las cantidades de entradas en un archivo, veamos el siguiente codigo:

local autores = {}
function Entrada(b) autores[b[i]] = true end
dofile("datos")
for nombre in pairs(autores) print(nombre) end
Anuncios

Con este codigo colectaremos en un conjunto los nombres de los autores encontrados en el archivo y luego los imprime (no necesariamente en el mismo orden), observemos como el enfoque basado en eventos en estos fragmentos del programa la funcion Entrada actua como una funcion de devolucion de llamada la cual es usada durante el dofile por cada entrada en el archivo de datos, si el tamaño del archivo no es un gran problema podemos usar los pares nombre-valor para nuestra representacion:

Entrada{
	autor = "Adam Boduch",
	titulo = "Learning JQuery 3",
	publicador = "PACKT",
	anyo = 2017 }
Entrada{
	autor = "Roberto Ierusalimschy",
	titulo = "Programming in Lua",
	publicador = "lua.org",
	anyo = 2006 }

Este formato es lo que llamamos un formato de datos auto-descriptivo porque cada pieza de dato esta adjunto a una breve descripcion de su significado, esta forma es un poco legible, por lo menos para los humanos, que un formato CSV u otro tipo de notificaciones, porque son faciles de editar a mano (cuando es necesario) y nos permiten hacer pequeñas modificaciones en el formato basico sin tener que cambiar el archivo de datos, por ejemplo si necesitamos agregar un nuevo campo solo necesitamos un pequeño cambio en el programa de lectura, asi proveer un valor por defecto cuando el campo esta ausente, veamos como se transformo nuestro programa con el formato nombre-valor:

Anuncios
local autores = {}
function Entrada(b) autores[b.autor] = true end
dofile("datos")
for nombre in pairs(autores) print(nombre) end

Como ahora el orden de los campos es irrelevante incluso si alguna de las entradas no tiene un autor solo debemos adaptar la funcion Entrada:

if b.autor then
	autores[b.autor] = true 
end

Esto no solo hace que Lua corra mas rapido sino que tambien compile mas rapido, tomemos el ejemplo anterior si lo usaramos para listar los autores este procesaria 2 MB en aproximadamente un segundo, y esto no es por casualidad porque la descripcion de datos ha sido una de las aplicaciones principales de Lua desde su creacion .

Anuncios

En resumen, hoy hemos visto archivos de datos, su estructura, sus posibilidades, como transformarlo en codigo Lua, como implementarlo y cuales son una de sus ventajas, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00