Lua - Datei-E / A.

Die E / A-Bibliothek wird zum Lesen und Bearbeiten von Dateien in Lua verwendet. In Lua gibt es zwei Arten von Dateivorgängen, nämlich implizite Dateideskriptoren und explizite Dateideskriptoren.

Für die folgenden Beispiele verwenden wir eine Beispieldatei test.lua, wie unten gezeigt.

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

Ein einfacher Vorgang zum Öffnen von Dateien verwendet die folgende Anweisung.

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

Die verschiedenen Dateimodi sind in der folgenden Tabelle aufgeführt.

Sr.Nr. Modus & Beschreibung
1

"r"

Schreibgeschützter Modus und ist der Standardmodus, in dem eine vorhandene Datei geöffnet wird.

2

"w"

Schreibaktivierter Modus, der die vorhandene Datei überschreibt oder eine neue Datei erstellt.

3

"a"

Anhänge-Modus, der eine vorhandene Datei öffnet oder eine neue Datei zum Anhängen erstellt.

4

"r+"

Lese- und Schreibmodus für eine vorhandene Datei.

5

"w+"

Alle vorhandenen Daten werden entfernt, wenn eine Datei vorhanden ist oder eine neue Datei mit Lese- / Schreibberechtigungen erstellt wird.

6

"a+"

Anhänge-Modus mit aktiviertem Lesemodus, der eine vorhandene Datei öffnet oder eine neue Datei erstellt.

Implizite Dateideskriptoren

Implizite Dateideskriptoren verwenden die Standardeingabe- / Ausgabemodi oder eine einzelne Eingabe- und eine einzelne Ausgabedatei. Ein Beispiel für die Verwendung impliziter Dateideskriptoren ist unten dargestellt.

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

Wenn Sie das Programm ausführen, erhalten Sie eine Ausgabe der ersten Zeile der Datei test.lua. Für unser Programm haben wir die folgende Ausgabe erhalten.

-- Sample test.lua

Dies war für uns die erste Zeile der Anweisung in der Datei test.lua. Auch die Zeile "- Ende der Datei test.lua" wird an die letzte Zeile des Codes test.lua angehängt.

Im obigen Beispiel können Sie sehen, wie die impliziten Deskriptoren mit dem Dateisystem mithilfe der io. "X" -Methoden funktionieren. Im obigen Beispiel wird io.read () ohne den optionalen Parameter verwendet. Der optionale Parameter kann einer der folgenden sein.

Sr.Nr. Modus & Beschreibung
1

"*n"

Liest von der aktuellen Dateiposition und gibt eine Zahl zurück, wenn diese an der Dateiposition vorhanden ist, oder gibt null zurück.

2

"*a"

Gibt den gesamten Inhalt der Datei von der aktuellen Dateiposition zurück.

3

"*l"

Liest die Zeile von der aktuellen Dateiposition und verschiebt die Dateiposition in die nächste Zeile.

4

number

Liest die Anzahl der in der Funktion angegebenen Bytes.

Andere gängige E / A-Methoden umfassen:

  • io.tmpfile() - Gibt eine temporäre Datei zum Lesen und Schreiben zurück, die nach dem Beenden des Programms entfernt wird.

  • io.type(file) - Gibt basierend auf der Eingabedatei zurück, ob Datei, geschlossene Datei oder Null.

  • io.flush() - Löscht den Standardausgabepuffer.

  • io.lines(optional file name)- Bietet einen generischen for- Schleifeniterator, der die Datei durchläuft und die Datei am Ende schließt, falls der Dateiname angegeben wird oder die Standarddatei verwendet wird und am Ende der Schleife nicht geschlossen wird.

Explizite Dateideskriptoren

Wir verwenden häufig einen expliziten Dateideskriptor, mit dem wir mehrere Dateien gleichzeitig bearbeiten können. Diese Funktionen sind impliziten Dateideskriptoren sehr ähnlich. Hier verwenden wir file: function_name anstelle von io.function_name. Das folgende Beispiel für die Dateiversion desselben Beispiels für implizite Dateideskriptoren ist unten dargestellt.

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

Wenn Sie das Programm ausführen, erhalten Sie eine ähnliche Ausgabe wie im Beispiel für implizite Deskriptoren.

-- Sample test.lua

Alle Modi zum Öffnen von Dateien und zum Lesen für externe Deskriptoren sind dieselben wie bei impliziten Dateideskriptoren.

Andere gängige Dateimethoden umfassen:

  • file:seek(optional whence, optional offset)- Woher Parameter ist "gesetzt", "cur" oder "end". Legt den neuen Dateizeiger mit der aktualisierten Dateiposition vom Anfang der Datei an fest. Die Offsets basieren in dieser Funktion auf Null. Der Versatz wird vom Anfang der Datei an gemessen, wenn das erste Argument "gesetzt" ist. von der aktuellen Position in der Datei, wenn es "cur" ist; oder vom Ende der Datei, wenn es "Ende" ist. Die Standardargumentwerte sind "cur" und 0, sodass die aktuelle Dateiposition durch Aufrufen dieser Funktion ohne Argumente ermittelt werden kann.

  • file:flush() - Löscht den Standardausgabepuffer.

  • io.lines(optional file name)- Bietet einen generischen for- Schleifeniterator, der die Datei durchläuft und die Datei am Ende schließt, falls der Dateiname angegeben wird oder die Standarddatei verwendet wird und am Ende der Schleife nicht geschlossen wird.

Ein Beispiel für die Verwendung der Suchmethode ist unten dargestellt. Es versetzt den Cursor von den 25 Positionen vor dem Dateiende. Die Lesefunktion druckt den Rest der Datei aus der Suchposition.

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

Sie erhalten eine Ausgabe ähnlich der folgenden.

sample2 test.lua
--test

Sie können alle verschiedenen Modi und Parameter ausprobieren, um die volle Leistungsfähigkeit der Lua-Dateivorgänge zu kennen.