English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La libreria I/O di Lua è utilizzata per leggere e elaborare i file. È divisa in modalità semplice (come C) e modalità completa.
La modalità semplice (simple model) ha un file di input e un file di output corrente, e fornisce operazioni correlate per questi file.
Il modello completo (complete model) utilizza il file handle esterno per implementare. In una forma orientata agli oggetti, tutte le operazioni di file vengono definite come metodi del file handle
La modalità semplice è adatta per alcune operazioni di file semplici. Ma quando si eseguono operazioni di file avanzate, la modalità semplice sembra non essere sufficiente. Ad esempio, leggere contemporaneamente più file, utilizzare il modello completo è più adatto.
L'operazione di apertura del file è la seguente:
file = io.open (filename[, mode])
I valori di mode sono:
Modalità | Descrizione |
---|---|
r | Apri un file in sola lettura, il file deve esistere. |
w | Apri un file scrivibile, se il file esiste, la lunghezza del file viene azzerata, il che significa che il contenuto del file sarà perso. Se il file non esiste, verrà creato il file. |
a | Apri un file scrivibile in modo aggiuntivo. Se il file non esiste, verrà creato il file. Se il file esiste, i dati scritti verranno aggiunti alla fine del file, il che significa che il contenuto del file precedente sarà conservato (EOF conservato). |
r+ | Apri un file leggibile e scrivibile, il file deve esistere. |
w+ | Apri un file leggibile e scrivibile, se il file esiste, la lunghezza del file viene azzerata, il che significa che il contenuto del file sarà perso. Se il file non esiste, verrà creato il file. |
a+ | Simile a a, ma questo file è leggibile e scrivibile |
b | Modalità binaria, se il file è un file binario, puoi aggiungere b |
+ | Il simbolo # indica che il file può essere letto e scritto. |
La modalità semplice utilizza lo standard I/O o un file di input e output corrente.
Ecco il codice del file file.lua, il file operato è test.lua (se non esiste, dovrai crearlo), il codice è il seguente:
-- Apre il file in modalità sola lettura file = io.open("test.lua", "r") -- Imposta il file di input predefinito su test.lua io.input(file) -- Output del primo riga del file print(io.read()) -- Chiude il file aperto io.close(file) -- Apri un file di scrittura in modalità aggiunta file = io.open("test.lua", "a") -- Imposta il file di output predefinito su test.lua io.output(file) -- Aggiungi una nota a piè di pagina Lua all'ultima riga del file io.write("-- test.lua note alla fine del file") -- Chiude il file aperto io.close(file)
Eseguendo il codice sopra, noterai che è stato outputto il primo riga del file test.lua e una nota a piè di pagina Lua è stata aggiunta all'ultima riga del file. Come nella mia uscita:
-- file: test.lua
Nell'esempio sopra abbiamo usato il metodo io."x" dove io.read() non ha parametri, i parametri possono essere uno dei seguenti:
Modalità | Descrizione |
---|---|
"*n" | Legge un numero e lo restituisce. Esempio: file.read("*n") |
"*a" | Legge tutto il file dalla posizione corrente. Esempio: file.read("*a") |
"*l" (predefinito) | Legge la prossima riga, restituisce nil alla fine del file (EOF). Esempio: file.read("*l") |
number | Restituisce una stringa di una determinata lunghezza o nil alla fine del file (EOF). Esempio: file.read(5) |
Altri metodi io:
io.tmpfile():Restituisce un file descriptor temporaneo, il file è aperto in modalità di aggiornamento e viene eliminato automaticamente alla fine del programma
io.type(file): Controlla se obj è un file descriptor disponibile
io.flush(): Scrive tutti i dati in buffer nel file
io.lines(nome file opzionale): Restituisce una funzione iterativa, che restituisce una riga del file ad ogni chiamata. Quando si raggiunge la fine del file, restituisce nil, ma non chiude il file
Di solito dobbiamo gestire più file allo stesso tempo. Dobbiamo usare file:function_name al posto di io:function_name metodo. Esempio: come gestire lo stesso file contemporaneamente:
-- Apre il file in modalità sola lettura file = io.open("test.lua", "r") -- Output del primo riga del file print(file:read()) -- Chiude il file aperto file:close() -- Apri un file di scrittura in modalità aggiunta file = io.open("test.lua", "a") -- Aggiungi una nota a piè di pagina Lua all'ultima riga del file file:write("--test") -- Chiude il file aperto file:close()
Eseguendo il codice sopra, noterai che è stato outputto il primo riga del file test.ua e una nota a piè di pagina Lua è stata aggiunta all'ultima riga del file. Come nella mia uscita:
-- file: test.lua
I parametri di read sono gli stessi del modello semplice.
Altre metodi:
file:seek(opzionale whence, opzionale offset): Imposta e ottieni la posizione corrente del file, se ha successo restituisce la posizione finale del file (in byte), se fallisce restituisce nil con un messaggio di errore. Il valore del parametro whence può essere:
Senza parametri file:seek() restituisce la posizione corrente, file:seek("set") posiziona all'inizio del file, file:seek("end") posiziona alla fine del file e restituisce la dimensione del file
"set": dall'inizio del file
"cur": dalla posizione corrente [predefinito]
"end": dal fondo del file
offset: di default è 0
file:flush(): Scrive tutti i dati in buffer nel file
io.lines(nome file opzionale): Apre il file specificato filename in modalità di lettura e restituisce una funzione iterativa, che restituisce una riga del file ogni volta che viene chiamata, quando si raggiunge la fine del file, restituisce nil e chiude automaticamente il file.
Quando non viene specificato un parametro, io.lines() io.input():lines(); legge il contenuto del dispositivo di input predefinito, ma non chiude il file, come ad esempio:
for line in io.lines("main.lua") do print(line) end
Esempio in cui viene utilizzato il metodo seek per posizionarsi all'ultima posizione del file in decimo quinto e utilizzare il parametro *a del metodo read, ovvero leggere l'intero file dalla posizione corrente (decimo quinto)
-- Apre il file in modalità sola lettura file = io.open("test.lua", "r") file:seek("end",-25) print(file:read("*a")) -- Chiude il file aperto file:close()
Il risultato che ottengo è:
st.lua fine del file--test