Существуют операции для установки стандартных (используемых по умолчанию) файлов ввода и файлов вывода, и все операции ввода/вывода работают с этими файлами. Функции для работы с неявными дескрипторами собраны в таблице io.
Для вызова функций используется запись вида:
Имя функции | Описание |
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 — имя переменной, содержащей объект-дескриптор.
Имя функции | Описание |
read | Читает данные из файла в соответствии с заданными форматами. |
lines | Возвращает функцию-итератор, которая при каждом вызове возвращает новую строку из файла. В отличие от io.lines , эта функция не закрывает файл по окончании цикла (т. е. достижении конца файла). При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки. |
write | Записывает в файл значения всех своих аргументов. |
flush | Сохраняет все данные, записанные в файл. |
setvbuf | Устанавливает режим буферизации для выходного файла. |
seek | Устанавливает текущую позицию в файле. |
close | Закрывает файл. |
- В ИСУБД «CronosPRO» библиотека ввода/вывода дополнена множеством новых функций. Подробное описание этих функций содержится в «Cправочнике по расширениям языка Lua для CronosPRO», входящем в стандартную поставку системы.
© 1999– Группа компаний «Кронос-Информ». Все права защищены. Условия использования.
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей .
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Пример работы с файлами в QLua (Lua): 122 комментария
f = io.open(getScriptPath()..»\Test.txt»,»r+»);
и почему в конце , «r+», что оно делает? И для чего нужна
f = io.open(getScriptPath()..»\Test.txt»,»r+»);
Не могли бы Вы объеснить чуть краче , тоесть , что такое getScriptPath()..»»\
«и почему в конце , «r+», что оно делает? И для чего нужна» — это режим открытия файла r от слова read — чтение, знак + означает что можно еще и писать будет в файл, в итоге «r+» означает режим чтения/записи
«Не могли бы Вы объеснить чуть краче , тоесть , что такое getScriptPath()..»»\» — getScriptPath() это функция встроенная в QLua, которая возвращает полный путь к скрипту, из которого она вызвана, оператор «..» называется оператором конкатенации, т.е. служит для склеивания нескольких строк в одну. В итоге, если Ваш скрипт находится в папке «C:\Trading», то в результате склейки получится строка «C:\Trading\Test.txt», двойной слеш используется для экранирования символа слеш, т.к. есть различные спецсимволы, которые содержат в себе слеш, например, »
» означает перенос строки, и чтобы в строку добавить именно символ слеш, который компьютер не будет пытаться распознать как начало спецсимвола, нужно экранировать его вторым слешем.
Такой вопрос. Если я «поставил» курсор в нужное место, то я могу как-то «вставлять» или наоборот «затирать»?
Например, есть строка в файле : «Я иду в школу», «ставлю» курсор перед «школу» . Если я в это место впишу «любимую» , то получится: «Я иду в любимую» правильно? Т.е. школа затрется? А можно «вставить» чтобы получилось «. в любимую школу». Или запись в файл как раз наоборот работает — вставляет , а не затирает? Или может даже есть разные способы? Понятно что можно считать весь файл и работать уже с текстом и потом полностью перезаписать. А вот сразу в файл так нельзя писать в разных режимах?
Только перезаписывать поверх можно, вставлять нельзя, файл это область памяти выделенная, к ней можно только добавить в конец еще какой-то объем памяти. Это как строка в тетради написанная, Вы же не сможете внутрь нее еще слов вставить, только перезаписать поверх, или в конец добавить. С файлами так же.
Здравствуйте!
Подскажите а как из файла прочитать данные в переменную.
Спасибо!
Здравствуйте! В примере, в 25 строке в цикле каждая строка файла считывается в переменную line, а потом значение этой переменной выводится в сообщении (message)
День добрый.
как получить значение из последней строки в txt файле?
как получить значение из последний строки предпоследнего столбца в файле csv, или например 3 столбца?
Добрый день, готовых функций для этого нет, вариант только изобретать свои, используя функции работы со строками, потому что текстовый файл, это, по сути, один массив символов, в котором строки отделяются символами переноса строки »
«, в CSV файле то же самое, строки разделены символами »
«, а ячейки символами «;» чаще всего. Если Вам нужно работать с разными элементами файла, то попробуйте лучше вот эту технологию применить: https://quikluacsharp.ru/quik-qlua/sohranenie-parametrov-skripta-qlua-lua-mezhdu-zapuskami/
Там все сводится к удобной работе с таблицей lua, ее считыванием из файла, изменением и повторным сохранением в файл.
Добрый день!
Данный скрипт
Ошибка lua:6: attempt to index global ‘f’ (a nil value)
Помогите разобраться!
Здравствуйте! Ответьте себе на вопрос: «Что делает функция getScriptPath() и как она работает ?» Можете здесь посмотреть: https://quikluacsharp.ru/qlua-osnovy/servisnye-funktsii-qlua-lua/
Видно, что недостаточно базовых знаний по программированию, приглашаю на скайп-обучение
В файле содержатся целые числа в десятичном виде. Преобразовать каждое число в двоичную форму. Выполнить шифрование данных таким образом, чтобы каждые восемь двоичных символов превращались в букву латинского алфавита. Таблица соответствия кодов буквам содержится во втором файле. Предусмотреть функцию для выполнения дешифрования.
Если в файле должна храниться таблица соответствия чисел буквам, к примеру
как мне их занести в таблицу в программе
что бы потом сравнивать их с уже существующими числами, и в последствии произвести замену числа на букву?