Lua - We / Wy pliku

Biblioteka I / O służy do czytania i manipulowania plikami w Lua. W Lua istnieją dwa rodzaje operacji na plikach, mianowicie niejawne deskryptory plików i jawne deskryptory plików.

W poniższych przykładach użyjemy przykładowego pliku test.lua, jak pokazano poniżej.

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

Prosta operacja otwierania pliku wykorzystuje następującą instrukcję.

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

W poniższej tabeli przedstawiono różne tryby plików.

Sr.No. Tryb i opis
1

"r"

Tryb tylko do odczytu i jest to domyślny tryb, w którym otwierany jest istniejący plik.

2

"w"

Tryb umożliwiający zapis, który zastępuje istniejący plik lub tworzy nowy plik.

3

"a"

Tryb dołączania, który otwiera istniejący plik lub tworzy nowy plik do dołączenia.

4

"r+"

Tryb odczytu i zapisu dla istniejącego pliku.

5

"w+"

Wszystkie istniejące dane są usuwane, jeśli plik istnieje lub zostanie utworzony nowy plik z uprawnieniami do odczytu i zapisu.

6

"a+"

Tryb dołączania z włączonym trybem odczytu, który otwiera istniejący plik lub tworzy nowy plik.

Niejawne deskryptory plików

Niejawne deskryptory plików używają standardowych trybów wejścia / wyjścia lub używają jednego pliku wejściowego i jednego pliku wyjściowego. Przykład użycia niejawnych deskryptorów plików przedstawiono poniżej.

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

Po uruchomieniu programu otrzymasz wynik pierwszej linii pliku test.lua. W przypadku naszego programu otrzymaliśmy następujący wynik.

-- Sample test.lua

To był dla nas pierwszy wiersz instrukcji w pliku test.lua. Również wiersz „- End of the test.lua file” zostałby dołączony do ostatniej linii kodu test.lua.

W powyższym przykładzie możesz zobaczyć, jak niejawne deskryptory współpracują z systemem plików przy użyciu metod io. "X". Powyższy przykład używa io.read () bez opcjonalnego parametru. Opcjonalnym parametrem może być dowolny z poniższych.

Sr.No. Tryb i opis
1

"*n"

Odczytuje od bieżącej pozycji pliku i zwraca liczbę, jeśli istnieje na tej pozycji lub zwraca nil.

2

"*a"

Zwraca całą zawartość pliku z bieżącej pozycji pliku.

3

"*l"

Odczytuje wiersz z bieżącej pozycji pliku i przenosi pozycję pliku do następnego wiersza.

4

number

Odczytuje liczbę bajtów określoną w funkcji.

Inne popularne metody I / O obejmują:

  • io.tmpfile() - Zwraca plik tymczasowy do odczytu i zapisu, który zostanie usunięty po zamknięciu programu.

  • io.type(file) - Zwraca czy plik, plik zamknięty czy nil na podstawie pliku wejściowego.

  • io.flush() - Czyści domyślny bufor wyjściowy.

  • io.lines(optional file name)- Zapewnia ogólny iterator pętli for, który przechodzi przez plik i zamyka plik na końcu, w przypadku podania nazwy pliku lub użycia pliku domyślnego, który nie jest zamknięty na końcu pętli.

Jawne deskryptory plików

Często używamy jawnego deskryptora pliku, który pozwala nam manipulować wieloma plikami naraz. Te funkcje są dość podobne do niejawnych deskryptorów plików. Tutaj używamy file: function_name zamiast io.function_name. Poniższy przykład wersji pliku tego samego niejawnego przykładu deskryptorów plików jest pokazany poniżej.

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

Po uruchomieniu programu uzyskasz podobne dane wyjściowe, jak przykład niejawnych deskryptorów.

-- Sample test.lua

Wszystkie tryby otwierania plików i parametrów do odczytu dla zewnętrznych deskryptorów są takie same, jak niejawne deskryptory plików.

Inne popularne metody plików obejmują:

  • file:seek(optional whence, optional offset)- Kiedy parametr jest ustawiony na „set”, „cur” lub „end”. Ustawia nowy wskaźnik pliku ze zaktualizowaną pozycją pliku od początku pliku. W tej funkcji przesunięcia są liczone od zera. Przesunięcie jest mierzone od początku pliku, jeśli pierwszy argument to „set”; od bieżącej pozycji w pliku, jeśli jest "aktualna"; lub od końca pliku, jeśli to „koniec”. Domyślne wartości argumentów to „cur” i 0, więc bieżącą pozycję pliku można uzyskać, wywołując tę ​​funkcję bez argumentów.

  • file:flush() - Czyści domyślny bufor wyjściowy.

  • io.lines(optional file name)- Zapewnia ogólny iterator pętli for, który przechodzi przez plik i zamyka plik na końcu, w przypadku podania nazwy pliku lub użycia pliku domyślnego, który nie jest zamknięty na końcu pętli.

Przykład użycia metody wyszukiwania pokazano poniżej. Przesuwa kursor z 25 pozycji przed końcem pliku. Funkcja odczytu wypisuje pozostałą część pliku z pozycji wyszukiwania.

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

Otrzymasz wyniki podobne do poniższych.

sample2 test.lua
--test

Możesz bawić się wszystkimi różnymi trybami i parametrami, aby poznać pełną zdolność operacji na plikach Lua.