Lua - E / S de archivos
La biblioteca de E / S se utiliza para leer y manipular archivos en Lua. Hay dos tipos de operaciones de archivo en Lua, a saber, descriptores de archivo implícitos y descriptores de archivo explícitos.
Para los siguientes ejemplos, usaremos un archivo de muestra test.lua como se muestra a continuación.
-- sample test.lua
-- sample2 test.lua
Una simple operación de apertura de archivo utiliza la siguiente declaración.
file = io.open (filename [, mode])
Los distintos modos de archivo se enumeran en la siguiente tabla.
No Señor. | Modo y descripción |
---|---|
1 | "r" Modo de solo lectura y es el modo predeterminado donde se abre un archivo existente. |
2 | "w" Modo habilitado para escritura que sobrescribe el archivo existente o crea uno nuevo. |
3 | "a" Modo de anexar que abre un archivo existente o crea un nuevo archivo para agregar. |
4 | "r+" Modo de lectura y escritura para un archivo existente. |
5 | "w+" Todos los datos existentes se eliminan si el archivo existe o se crea un archivo nuevo con permisos de lectura y escritura. |
6 | "a+" Modo de anexar con modo de lectura habilitado que abre un archivo existente o crea un archivo nuevo. |
Descriptores de archivo implícitos
Los descriptores de archivo implícitos utilizan los modos de entrada / salida estándar o utilizan un archivo de entrada y salida única. A continuación, se muestra un ejemplo del uso de descriptores de archivo implícitos.
-- Opens a file in read
file = io.open("test.lua", "r")
-- sets the default input file as test.lua
io.input(file)
-- prints the first line of the file
print(io.read())
-- closes the open file
io.close(file)
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- sets the default output file as test.lua
io.output(file)
-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")
-- closes the open file
io.close(file)
Cuando ejecute el programa, obtendrá una salida de la primera línea del archivo test.lua. Para nuestro programa, obtuvimos el siguiente resultado.
-- Sample test.lua
Esta fue la primera línea de la declaración en el archivo test.lua para nosotros. Además, la línea "- Fin del archivo test.lua" se añadiría a la última línea del código test.lua.
En el ejemplo anterior, puede ver cómo funcionan los descriptores implícitos con el sistema de archivos utilizando los métodos io. "X". El ejemplo anterior usa io.read () sin el parámetro opcional. El parámetro opcional puede ser cualquiera de los siguientes.
No Señor. | Modo y descripción |
---|---|
1 | "*n" Lee desde la posición actual del archivo y devuelve un número si existe en la posición del archivo o devuelve nulo. |
2 | "*a" Devuelve todo el contenido del archivo desde la posición actual del archivo. |
3 | "*l" Lee la línea desde la posición actual del archivo y mueve la posición del archivo a la siguiente línea. |
4 | number Lee el número de bytes especificado en la función. |
Otros métodos de E / S comunes incluyen,
io.tmpfile() - Devuelve un archivo temporal para lectura y escritura que se eliminará una vez que se cierre el programa.
io.type(file) - Devuelve si archivo, archivo cerrado o nulo según el archivo de entrada.
io.flush() - Borra el búfer de salida predeterminado.
io.lines(optional file name)- Proporciona un iterador de bucle for genérico que recorre el archivo y cierra el archivo al final, en caso de que se proporcione el nombre del archivo o se utilice el archivo predeterminado y no se cierre al final del bucle.
Descriptores de archivos explícitos
A menudo utilizamos un descriptor de archivo explícito que nos permite manipular varios archivos a la vez. Estas funciones son bastante similares a los descriptores de archivos implícitos. Aquí, usamos file: function_name en lugar de io.function_name. El siguiente ejemplo de la versión de archivo del mismo ejemplo de descriptores de archivo implícitos se muestra a continuación.
-- Opens a file in read mode
file = io.open("test.lua", "r")
-- prints the first line of the file
print(file:read())
-- closes the opened file
file:close()
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- appends a word test to the last line of the file
file:write("--test")
-- closes the open file
file:close()
Cuando ejecute el programa, obtendrá un resultado similar al del ejemplo de descriptores implícitos.
-- Sample test.lua
Todos los modos de apertura de archivos y parámetros de lectura para descriptores externos son los mismos que los descriptores de archivos implícitos.
Otros métodos de archivo comunes incluyen,
file:seek(optional whence, optional offset)- De donde el parámetro es "set", "cur" o "end". Establece el puntero del nuevo archivo con la posición del archivo actualizado desde el principio del archivo. Las compensaciones se basan en cero en esta función. El desplazamiento se mide desde el principio del archivo si el primer argumento está "establecido"; desde la posición actual en el archivo si es "cur"; o desde el final del archivo si es "fin". Los valores predeterminados de los argumentos son "cur" y 0, por lo que la posición actual del archivo se puede obtener llamando a esta función sin argumentos.
file:flush() - Borra el búfer de salida predeterminado.
io.lines(optional file name)- Proporciona un iterador de bucle for genérico que recorre el archivo y cierra el archivo al final, en caso de que se proporcione el nombre del archivo o se utilice el archivo predeterminado y no se cierre al final del bucle.
A continuación se muestra un ejemplo para utilizar el método de búsqueda. Desplaza el cursor desde las 25 posiciones antes del final del archivo. La función de lectura imprime el resto del archivo desde la posición de búsqueda.
-- Opens a file in read
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- closes the opened file
file:close()
Obtendrá un resultado similar al siguiente.
sample2 test.lua
--test
Puede jugar con todos los diferentes modos y parámetros para conocer la capacidad total de las operaciones del archivo Lua.