| Раздел: CronosPRO | Дата редакции: 15.07.2013 | id статьи: 1555 |
Библиотека ввода/вывода в Lua
Использование неявных дескрипторов файлов
Существуют операции для установки стандартных (используемых по умолчанию) файлов ввода и файлов вывода, и все операции ввода/вывода работают с этими файлами. Функции для работы с неявными дескрипторами собраны в таблице io.
Для вызова функций используется запись вида:
io.имя_функции(...)
Например:
io.close()
| Имя функции | Описание |
| open | Открывает файл в заданном режиме. |
| input | При вызове с указанием имени файла, открывает данный файл (в текстовом режиме), и направляет его поток на стандартный поток ввода. При вызове с дескриптором файла, делает дескриптор файла стандартным дескриптором ввода (перенаправляет поток, соответствующий дескриптору файла, на стандартный поток ввода). При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки. |
| output | Аналогична io.input, но работает со стандартным файлом вывода. |
| close | Закрывает файл. Эквивалентна file:close. Вызванная без параметра, закрывает стандартный файл вывода. |
| read | Аналогична io.input():read. |
| lines | Открывает файл с заданным именем в режиме чтения и возвращает функцию-итератор (iterator function), которая при каждом последующем вызове возвращает новую строчку из файла. При обнаружении функцией-итератором конца файла, она возвращает nil (для окончания цикла) и автоматически закрывает файл. Вызов io.lines без указания имени файла эквивалентен io.input():lines(); таким образом, он обрабатывает строки стандартного файла ввода. В этом случае файл по окончанию итераций не закрывается автоматически. |
| write | Эквивалентна io.output():write. |
| flush | Сохраняет все данные, записанные в стандартный поток вывода. Эквивалентна file:flush для стандартного потока вывода. |
| tmpfile | Возвращает дескриптор для временного файла. Этот файл открывается в режиме изменения и автоматически удаляется при завершении программы. |
| type | Проверяет, является ли объект, переданный функции в качестве параметра, корректным дескриптором файла. Возвращает строку «file», если объект является открытым дескриптором файла; строку «closed file» — если объект является закрытым дескриптором файла; nil — если объект не является дескриптором файла. |
Использование явных дескрипторов файлов
При использовании явных файловых дескрипторов сначала создаётся объект-дескриптор file (для этого используется функция io.open), после чего все операции с файлом выполняются при помощи методов данного дескриптора.
Для вызова методов используется запись вида:
handle:имя_метода(...),
где handle — имя переменной, содержащей объект-дескриптор.
| Имя функции | Описание |
| read | Читает данные из файла в соответствии с заданными форматами. |
| lines | Возвращает функцию-итератор, которая при каждом вызове возвращает новую строку из файла. В отличие от io.lines , эта функция не закрывает файл по окончании цикла (т. е. достижении конца файла). При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки. |
| write | Записывает в файл значения всех своих аргументов. |
| flush | Сохраняет все данные, записанные в файл. |
| setvbuf | Устанавливает режим буферизации для выходного файла. |
| seek | Устанавливает текущую позицию в файле. |
| close | Закрывает файл. |
Обратите внимание
- В ИСУБД «CronosPRO» библиотека ввода/вывода дополнена множеством новых функций. Подробное описание этих функций содержится в «Cправочнике по расширениям языка Lua для CronosPRO», входящем в стандартную поставку системы.
