English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua I/La biblioteca O se utiliza para leer y procesar archivos. Se divide en modo simple (como C) y modo completo.
El modo simple (modo simple) tiene un archivo de entrada actual y un archivo de salida actual, y proporciona operaciones relacionadas con estos archivos.
El modo completo (modelo completo) utiliza el manejador de archivos externo para implementar. Presenta una forma de objeto para definir todas las operaciones de archivo como métodos del manejador de archivos
El modo simple es adecuado para realizar algunas operaciones de archivo simples. Pero cuando se realizan algunas operaciones de archivo avanzadas, el modo simple se muestra insuficiente. Por ejemplo, leer varios archivos al mismo tiempo, es más adecuado usar el modo completo.
La operación de apertura de archivo se muestra a continuación:
file = io.open (filename[, mode])
Los valores de mode son:
Modo | Descripción |
---|---|
r | Abrir un archivo en modo de solo lectura, el archivo debe existir. |
w | Abrir un archivo de escritura. Si el archivo existe, la longitud del archivo se establece en cero, es decir, el contenido del archivo se borrará. Si el archivo no existe, se creará el archivo. |
a | Abrir un archivo de escritura adicional. Si el archivo no existe, se creará el archivo. Si el archivo existe, los datos escritos se agregarán al final del archivo, es decir, el contenido original del archivo se conservará (se conservará el EOF). |
r+ | Abrir un archivo existente en modo de lectura y escritura, el archivo debe existir. |
w+ | Abrir un archivo de lectura y escritura, si el archivo existe, la longitud del archivo se establece en cero, es decir, el contenido del archivo se borrará. Si el archivo no existe, se creará el archivo. |
a+ | Al igual que a, pero este archivo es legible y editable |
b | El modo binario, si el archivo es un archivo binario, se puede agregar b |
+ | El número indica que el archivo puede ser tanto leído como escrito |
El modo simple utiliza el estándar I/O usar un archivo de entrada actual y un archivo de salida actual.
A continuación, se muestra el código del archivo file.lua, el archivo de operaciones es test.lua (si no tienes que crearlo), el código es el siguiente:
-- Abrir el archivo en modo de solo lectura file = io.open("test.lua", "r") -- Establecer el archivo de entrada predeterminado como 'test.lua' io.input(file) -- Escribir la primera línea del archivo print(io.read()) -- Cerrar el archivo abierto io.close(file) -- Abrir un archivo de escritura solo en modo adicional file = io.open("test.lua", "a") -- Establecer el archivo de salida predeterminado como 'test.lua' io.output(file) -- Agregar comentarios Lua en la última línea del archivo io.write("-- comentarios al final del archivo test.lua") -- Cerrar el archivo abierto io.close(file)
Ejecuta el código anterior y verás que se ha producido la información de la primera línea del archivo test.lua y se ha agregado un comentario lua en la última línea del archivo. Por ejemplo, la salida de mi lado es:
-- archivo test.lua
En los ejemplos anteriores, hemos utilizado el método io."x" donde no hemos introducido parámetros en io.read(), los parámetros pueden ser uno de los siguientes en la tabla:
Modo | Descripción |
---|---|
"*n" | Leer un número y devolverlo. Ejemplo: file.read("*n") |
"*a" | Leer todo el archivo desde la posición actual. Ejemplo: file.read("*a") |
"*l" (por defecto) | Leer la siguiente línea, devuelve nil en EOF (final de archivo). Ejemplo: file.read("*l") |
number | Devuelve una cadena de un número específico de caracteres o nil en EOF. Ejemplo: file.read("5) |
Otros métodos de io incluyen:
io.tmpfile():Devuelve un manejador de archivo temporal que se abre en modo de actualización y se elimina automáticamente al finalizar el programa
io.type(file): Detectar si obj es un manejador de archivo disponible
io.flush(): Escribir todos los datos en el búfer del archivo
io.lines(opcional nombre de archivo): Devuelve una función iterativa que obtiene una línea del archivo cada vez que se llama, y cuando alcanza el final del archivo, devuelve nil, pero no cierra el archivo
Generalmente, necesitamos procesar varios archivos al mismo tiempo. Necesitamos usar file:function_name en lugar del método io:function_name. A continuación, se muestra un ejemplo de cómo procesar el mismo archivo simultáneamente:
-- Abrir el archivo en modo de solo lectura file = io.open("test.lua", "r") -- Escribir la primera línea del archivo print(file:read()) -- Cerrar el archivo abierto file:close() -- Abrir un archivo de escritura solo en modo adicional file = io.open("test.lua", "a") -- Agregar comentarios Lua en la última línea del archivo file:write("--test) -- Cerrar el archivo abierto file:close()
Ejecuta el código anterior y verás que se ha producido la información de la primera línea del archivo test.ua y se ha agregado un comentario lua en la última línea del archivo. Por ejemplo, la salida de mi lado es:
-- archivo test.lua
Los parámetros de 'read' son los mismos que en el modo simple.
其他方法:
file:seek(opcional whence, opcional offset): Establecer y obtener la posición actual del archivo, si tiene éxito devuelve la posición final del archivo (en bytes), si falla devuelve nil más información de error. El valor del parámetro whence puede ser:
Sin parámetros file:seek() devuelve la posición actual, file:seek("set") ubica en el principio del archivo, file:seek("end") ubica en el final del archivo y devuelve el tamaño del archivo
"set": desde el principio del archivo
"cur": desde la posición actual [por defecto]
"end": desde el final del archivo
offset: por defecto es 0
file:flush(): Escribir todos los datos en el búfer del archivo
io.lines(opcional nombre de archivo): Abrir el archivo especificado filename en modo de lectura y devolver una función iterativa, que cada vez llama obtiene una línea del contenido del archivo, cuando llega al final del archivo, devuelve nil y cierra automáticamente el archivo.
Cuando no se especifica parámetro, io.lines() -> io.input():lines();
for line in io.lines("main.lua") do print(line) end
El siguiente ejemplo utiliza el método seek, ubicándose en la 25 la posición y utiliza el método read *el parámetro a, es decir, desde la posición actual (la 25 en una posición) leer todo el archivo.
-- Abrir el archivo en modo de solo lectura file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- Cerrar el archivo abierto file:close()
El resultado que obtengo por aquí es:
st.lua al final del archivo--test