Lua - File I / O

La libreria I / O viene utilizzata per leggere e manipolare i file in Lua. Ci sono due tipi di operazioni sui file in Lua, ovvero descrittori di file impliciti e descrittori di file espliciti.

Per i seguenti esempi, useremo un file di esempio test.lua come mostrato di seguito.

-- sample test.lua
-- sample2 test.lua

Una semplice operazione di apertura di file utilizza la seguente istruzione.

file = io.open (filename [, mode])

Le varie modalità di file sono elencate nella tabella seguente.

Sr.No. Modalità e descrizione
1

"r"

Modalità di sola lettura ed è la modalità predefinita in cui viene aperto un file esistente.

2

"w"

Modalità abilitata alla scrittura che sovrascrive il file esistente o crea un nuovo file.

3

"a"

Modalità di aggiunta che apre un file esistente o crea un nuovo file da aggiungere.

4

"r+"

Modalità di lettura e scrittura per un file esistente.

5

"w+"

Tutti i dati esistenti vengono rimossi se il file esiste o viene creato un nuovo file con autorizzazioni di lettura e scrittura.

6

"a+"

Modalità di aggiunta con modalità di lettura abilitata che apre un file esistente o crea un nuovo file.

Descrittori di file impliciti

I descrittori di file impliciti utilizzano le modalità di input / output standard o utilizzano un singolo file di input e un singolo output. Di seguito è riportato un esempio di utilizzo dei descrittori di file impliciti.

-- 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)

Quando esegui il programma, otterrai un output della prima riga del file test.lua. Per il nostro programma, abbiamo ottenuto il seguente output.

-- Sample test.lua

Questa è stata la prima riga della dichiarazione nel file test.lua per noi. Anche la riga "- Fine del file test.lua" verrebbe aggiunta all'ultima riga del codice test.lua.

Nell'esempio sopra, puoi vedere come i descrittori impliciti funzionano con il file system usando i metodi io. "X". L'esempio precedente utilizza io.read () senza il parametro opzionale. Il parametro facoltativo può essere uno dei seguenti.

Sr.No. Modalità e descrizione
1

"*n"

Legge dalla posizione del file corrente e restituisce un numero se esiste nella posizione del file o restituisce zero.

2

"*a"

Restituisce tutto il contenuto del file dalla posizione del file corrente.

3

"*l"

Legge la riga dalla posizione del file corrente e sposta la posizione del file alla riga successiva.

4

number

Legge il numero di byte specificato nella funzione.

Altri metodi di I / O comuni includono,

  • io.tmpfile() - Restituisce un file temporaneo per la lettura e la scrittura che verrà rimosso una volta chiuso il programma.

  • io.type(file) - Restituisce file, file chiuso o nullo in base al file di input.

  • io.flush() - Cancella il buffer di output predefinito.

  • io.lines(optional file name)- Fornisce un iteratore di ciclo for generico che esegue il ciclo del file e alla fine chiude il file, nel caso in cui venga fornito il nome del file o il file predefinito venga utilizzato e non chiuso alla fine del ciclo.

Descrittori di file espliciti

Spesso utilizziamo un descrittore di file esplicito che ci consente di manipolare più file contemporaneamente. Queste funzioni sono abbastanza simili ai descrittori di file impliciti. Qui, usiamo file: nome_funzione invece di nome_io.funzione. Di seguito è riportato il seguente esempio della versione di file dello stesso esempio di descrittori di file impliciti.

-- 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()

Quando esegui il programma, otterrai un output simile all'esempio dei descrittori impliciti.

-- Sample test.lua

Tutte le modalità di apertura dei file e parametri di lettura per i descrittori esterni sono le stesse dei descrittori di file impliciti.

Altri metodi di file comuni includono,

  • file:seek(optional whence, optional offset)- Da cui il parametro è "set", "cur" o "end". Imposta il nuovo puntatore del file con la posizione del file aggiornata dall'inizio del file. Gli offset sono in base zero in questa funzione. L'offset viene misurato dall'inizio del file se il primo argomento è "set"; dalla posizione corrente nel file se è "cur"; o dalla fine del file se è "end". I valori degli argomenti predefiniti sono "cur" e 0, quindi la posizione del file corrente può essere ottenuta chiamando questa funzione senza argomenti.

  • file:flush() - Cancella il buffer di output predefinito.

  • io.lines(optional file name)- Fornisce un iteratore di ciclo for generico che esegue il ciclo del file e alla fine chiude il file, nel caso in cui venga fornito il nome del file o il file predefinito venga utilizzato e non chiuso alla fine del ciclo.

Di seguito è mostrato un esempio per utilizzare il metodo seek. Sposta il cursore dalle 25 posizioni precedenti alla fine del file. La funzione di lettura stampa il resto del file dalla posizione di ricerca.

-- 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()

Otterrai un output simile al seguente.

sample2 test.lua
--test

Puoi giocare con tutte le diverse modalità e parametri per conoscere la piena capacità delle operazioni sui file Lua.