чем открыть lua script
Как написать Lua скрипты и где они используются? Подробный обзор
Lua-скрипты пишутся на языке программирования Lua, что очень даже естественно. Lua — это интерпретируемый скриптовой язык родом из Бразилии. Год его рождения — 1993-й год. С тех пор он постоянно развивается и расширяет свои возможности. Lua — это язык свободного распространения. По своей функциональности он ближе к JavaScript, но по некоторым компетентным мнениям он более гибкий, чем JS.
Скрипты Lua
Скрипты Lua не имеют собственной функции, с которой бы начиналось их выполнение. Это просто список заданных инструкций, которы е выполняются по порядку, стартуя с первой.
Скрипты Луа могут быть:
Переменные в скриптах Lua
Есть 4 требования при наименовании переменных:
Все переменные, как и в любом другом языке, делятся на 2 основных типа и могут быть:
Какую типизацию данных воспринимают скрипты Луа
Сам по себе язык Lua воспринимает следующую типизацию данных:
Любая переменная готова использовать любой из перечисленных типов — это определяет динамическая типизация языка Lua.
Комментарии в скриптах Lua
Комментарии в скриптах Lua могут быть:
Где используются скрипты Lua
Скриптинг Lua не так распространен, как JavaScript, но все равно за долгие годы существования этого языка он нашел последователей и занял свое место. Скрипты Lua применяются в проектах из разных сфер, некоторые из них довольно известные. Например:
Заключение
Отметим несколько достоинств скриптов Луа:
Да, Lua не самый популярный язык программирования, но он однозначно достоин внимания.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
2.12. Скрипты Lua
Содержание
1. Введение
Double Commander может выполнять скрипты Lua с помощью команды cm_ExecuteScript.
Также на языке Lua можно писать информационные плагины, примеры можно найти в папке программы (plugins/wdx/scripts).
Более подробную информацию о языке программирования Lua можно найти на официальном веб-сайте Lua.
2. Необходимая DLL
Чтобы использовать скрипты Lua, нам требуется интерпретатор Lua версии 5.1 или выше, DLL-файл должен лежать рядом с исполняемым файлом Double Commander или в системной папке.
По умолчанию DC ищет файл с именем lua5.1.dll (Windows), liblua5.1.so.0 (Unix или GNU/Linux) или liblua5.1.dylib (Mac OS). Мы можем вручную изменить имя файла в параметре
Мы можем использовать DLL-файл проекта LuaJIT. LuaJIT сочетает в себе высокоскоростной интерпретатор, написанный на ассемблере, и JIT-компилятор. Также мы получаем библиотеку FFI: с её помощью в скриптах можно будет вызывать внешние функции C и использовать структуры данных C. DLL для Windows: 32-битная или 64-битная.
Если мы используем 64-битную версию DC, то DLL-файл также должен быть 64-битным.
Дистрибутивы DC для Windows включают в себя DLL-файл Lua (в DC 0.9.7 и новее из проекта LuaJIT), в иных случаях мы можем найти и установить его с помощью менеджера пакетов или скомпилировать.
3. Библиотеки функций Double Commander
Double Commander предлагает несколько библиотек функций для скриптов Lua, список представлен ниже.
3.1. Библиотека DC
Список библиотек | ||
---|---|---|
Библиотека | Имя функции | Краткое описание |
DC.LogWrite(Message, MsgType, bForce, bLogFile)
Пишет сообщение в окно протокола.
Получить активную панель: возвращает 0, если активна левая панель, или 1, если правая.
Сделать активной: левую панель, если iPanel равно 0, или правую, если равно 1.
DC.ExecuteCommand(Command, Param1, Param2. ParamX)
Примечание: Скрипты работают в основном потоке Double Commander, поэтому иногда последовательное выполнение команд для навигации может не сработать (например, большие каталоги, медленный диск), в этом случае попробуйте отключить Загружать список файлов в отдельном потоке в настройках.
3.1.1. Пример с DC.ExecuteCommand
В этом примере мы написали простой скрипт, который сделает следующее:
Для выполнения нашего скрипта мы можем создать кнопку на панели инструментов с внутренней командой cm_ExecuteScript.
Кроме того, для редактирования наших скриптов мы можем использовать внутренний редактор Double Commander.
3.2. Библиотека System
Библиотека DC | |
---|---|
Функция | Описание |
Приостанавливает выполнение скрипта на указанное количество миллисекунд ( Milliseconds ), выполнение сценария будет продолжено после истечения указанного времени.
Возвращает количество интервалов времени (тиков) с момента старта системы. Это полезно для измерения времени, но не следует делать каких-либо предположений относительно количества времени в интервале между тиками.
Проверяет, существует ли в файловой системе определённый файл.
Проверяет существование Directory в файловой системе и что это действительно каталог.
Подробное описание возвращаемого значения смотрите здесь.
Handle, FindData = SysUtils.FindFirst(Path)
Ищет файлы, совпадающие с Path (можно использовать маски).
В случае успеха функция вернёт дескриптор поиска Handle для последующих вызовов SysUtils.FindNext и поиска других совпадений с паттерном.
Таблица FindData содержит информацию о найденном файле или каталоге.
Поля таблицы FindData :
Result, FindData = SysUtils.FindNext(Handle)
Завершает серию вызовов SysUtils.FindFirst / SysUtils.FindNext и освобождает использованную память.
Вызов этой функции абсолютно необходим, иначе могут возникнуть большие утечки памяти.
bResult = SysUtils.CreateHardLink(Path, LinkName)
bResult = SysUtils.CreateSymbolicLink(Path, LinkName)
sTarget = SysUtils.ReadSymbolicLink(LinkName, Recursive)
Если Recursive равно true и ссылка указывает на ссылку, то она разрешается рекурсивно до тех пор, пока не будет найдено допустимое имя файла, не являющееся ссылкой.
Позволяет получить от DC разделитель пути в системе.
В системах Unix/Linux это будет » / » и » \ » в Windows.
Возвращает имя файла из полного (имя+путь) имени файла.
Имя файла содержит все символы после последнего символа разделителя каталогов («/» или «\») или буквы диска.
Возвращает путь из полного имени файла (включая букву диска).
Путь содержит все символы до последнего символа разделителя каталогов («/» или «\»), включая сам разделитель каталогов.
Возвращает диск из полного имени файла.
Обратите внимание, некоторые операционные системы не поддерживают буквы дисков.
Возвращает расширение файла (все символы после последней точки, включая сам символ «.»).
bResult = SysUtils.MatchesMask(FileName, Mask, MaskOptions)
MaskOptions (необязательный параметр, по умолчанию 0) задаётся как сумма следующих значений:
bResult = SysUtils.MatchesMaskList(FileName, MaskList, Separator, MaskOptions)
Separator и MaskOptions (см. выше) — необязательные параметры.
3.2.1. Описание возвращаемого значения SysUtils.FileGetAttr
FileGetAttr возвращает атрибуты FileName в виде ИЛИ-совокупности следующих констант:
Библиотека System | |
---|---|
Функция | Описание |
Константы, используемые в возвращаемом значении SysUtils.FileGetAttr | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Значение | Описание | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Системный файл. В Unix/Linux это может быть символьное или блочное физическое устройство, именованный канал (FIFO). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Метка тома (означает, что файл содержит идентификатор (ID) тома). Только для DOS/Windows 9x на обычной файловой системе FAT (не VFAT или FAT32). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.2.2. Пример с SysUtils.FileGetAttrПример скрипта ниже использует SysUtils.FileGetAttr. Если параметр окажется каталогом, то скрипт откроет его в новой вкладке активной панели и переключится на неё. В приведённом выше примере params[1] является первым параметром, переданным скрипту. При использовании внутренней команды cm_ExecuteScript это будет первый параметр, переданный после имени файла скрипта. Итак, в нашем примере мы можем создать на панели инструментов кнопку, как показано ниже: В этом примере скрипту будет передан параметр %»0%p : имя выделенного в активной панели файла или папки, без кавычек. 3.2.3. Пример использования FindFirst, FindNext и FindCloseВ следующем примере мы просканируем содержимое каталога, переданного первым параметром, и сохраним полученные данные в текстовый файл с именем, переданным вторым параметром. Это даст нам хорошее представление об использовании FindFirst, FindNext и FindClose. В приведённом выше примере нам нужно передать скрипту два параметра: Настраиваем кнопку на панели инструментов с внутренней командой cm_ExecuteScript и передаём параметрами всё необходимое: В этом примере скрипту в качестве первого параметра будет передано %»0%Ds : имя каталога активной панели, без кавычек. 3.3. Библиотека ClipboardDouble Commander предоставляет скриптам Lua библиотеку функций для работы с буфером обмена. Очищает содержимое буфера обмена. Добавляет в буфер обмена текст Html в формате HTML (формат буфера обмена CF_HTML ). Содержимое может быть вставлено в приложения, поддерживающие этот формат буфера обмена, такие как MS Word, LO Writer и другие. Например, у нас может быть следующее: 3.3.1. Пример работы с буфером обменаЭто относительно большой скрипт, но было бы неплохо собрать вместе несколько функций, с которыми мы познакомились ранее. Предполагается, что в нашей активной панели открыт каталог с большим количеством текстовых файлов. Также предполагается, что в настоящее время в буфере обмена одно слово и что скрипт в качестве единственного параметра получит текущий каталог активной панели. Скрипт будет сканировать папку, читать содержимое файлов, один за другим, и искать слово из буфера обмена. Затем имена файлов, которые содержат это словом, будут скопированы в буфер обмена. Далее скрипт вызовет внутреннюю команду cm_LoadSelectionFromClip и все эти файлы будут выделены. Кроме того, в конце вернём обратно в буфер обмена слово, которое мы искали. 3.4. Библиотека DialogsЭта библиотека позволяет нашим скриптам взаимодействовать с пользователем, показывая сообщения, выдавая запросы и т.д.
ButPressed = Dialogs.MessageBox(Message, Title, ButFlags) Показывает окно сообщения, функция вернёт нажатую пользователем кнопку. bAck, sAnswer = Dialogs.InputQuery(Title, Msg, bMask, sDefault) Показывает диалоговое окно с полем ввода текста. sAnswer = Dialogs.InputListBox(Title, Msg, Items, sDefault) Показывает диалоговое окно с возможностью выбора из списка элементов. 3.4.1. Кнопки Dialogs.MessageBox
3.4.2. Стиль окна Dialogs.MessageBoxСтиль окна Dialogs.MessageBox задаётся одним из следующих значений: 3.4.3. Кнопка по умолчанию в Dialogs.MessageBoxКнопка по умолчанию (активная) в Dialogs.MessageBox задаётся одним из следующих значений:
3.4.4. Возвращаемое значение Dialogs.MessageBox
3.4.5. Пример использования Dialogs.MessageBoxМаленький скрипт, использующий Dialogs.MessageBox : 3.4.6. Пример использования Dialogs.InputQueryМаленький скрипт, использующий Dialogs.InputQuery : 3.5. Библиотека UTF-8Эта библиотека обеспечивает базовую поддержку кодировки UTF-8. Result = LazUtf8.Pos(SearchText, SourceText, Offset) Поиск подстроки в строке, начиная с определённой позиции. Поиск чувствителен к регистру. Result = LazUtf8.Copy(Source, Index, Count) Копирует (извлекает) часть строки. Возвращает количество символов в строке с учётом кодировки UTF-8. Возвращает строку, в которой все буквы в нижнем регистре (строчные) заменены на буквы в верхнем регистре (прописные или заглавные). Возвращает строку, в которой все буквы в верхнем регистре (прописные или заглавные) заменены на буквы в нижнем регистре (строчные). Result = LazUtf8.ConvertEncoding(String, FromEnc, ToEnc) Список поддерживаемых значений кодировок: 3.6. Библиотека OSЭта библиотека содержит функции, связанные с операционной системой, в которой запущен Double Commander. Список доступных функций:
command может быть: Возвращает строку с именем файла, который может быть использован в качестве временного файла. lua чтение из файлаСуществуют операции для установки стандартных (используемых по умолчанию) файлов ввода и файлов вывода, и все операции ввода/вывода работают с этими файлами. Функции для работы с неявными дескрипторами собраны в таблице io. Для вызова функций используется запись вида:
Использование явных дескрипторов файловПри использовании явных файловых дескрипторов сначала создаётся объект-дескриптор file (для этого используется функция io.open), после чего все операции с файлом выполняются при помощи методов данного дескриптора. Для вызова методов используется запись вида: где handle — имя переменной, содержащей объект-дескриптор. © 1999– Группа компаний «Кронос-Информ». Все права защищены. Условия использования. Добавить комментарий Отменить ответДля отправки комментария вам необходимо авторизоваться. Пример работы с файлами в QLua (Lua): 122 комментарияТолько перезаписывать поверх можно, вставлять нельзя, файл это область памяти выделенная, к ней можно только добавить в конец еще какой-то объем памяти. Это как строка в тетради написанная, Вы же не сможете внутрь нее еще слов вставить, только перезаписать поверх, или в конец добавить. С файлами так же. Здравствуйте! Здравствуйте! В примере, в 25 строке в цикле каждая строка файла считывается в переменную line, а потом значение этой переменной выводится в сообщении (message) День добрый. Добрый день, готовых функций для этого нет, вариант только изобретать свои, используя функции работы со строками, потому что текстовый файл, это, по сути, один массив символов, в котором строки отделяются символами переноса строки » Добрый день! Ошибка lua:6: attempt to index global ‘f’ (a nil value) Видно, что недостаточно базовых знаний по программированию, приглашаю на скайп-обучение ��
Если в файле должна храниться таблица соответствия чисел буквам, к примеру как мне их занести в таблицу в программе что бы потом сравнивать их с уже существующими числами, и в последствии произвести замену числа на букву? Русские БлогиВвод-вывод файла LuaВвод-вывод файла LuaБиблиотека ввода-вывода Lua используется для чтения и обработки файлов. Разделены на простой режим (такой же, как C) и полный режим. Простой режим больше подходит для выполнения простых файловых операций. Но при выполнении некоторых расширенных операций с файлами простой режим оказывается неадекватным. Например, для таких операций, как одновременное чтение нескольких файлов, больше подходит полный режим. Оператор операции с открытым файлом выглядит следующим образом:
Простой режимВ простом режиме используется стандартный ввод-вывод или текущий входной файл и текущий выходной файл. Выполнив приведенный выше код, вы обнаружите, что первая строка информации в файле test.ua выводится, а комментарий lua добавляется к последней строке файла. Например, вот что я вывожу: В приведенном выше примере мы использовали метод io. «X», где мы не брали параметры в io.read (), и параметр может быть одним из следующих:
Полный режимОбычно нам нужно обрабатывать несколько файлов одновременно. Нам нужно использовать file: function_name вместо метода io.function_name. В следующем примере показано, как обрабатывать один и тот же файл одновременно: Выполнив приведенный выше код, вы обнаружите, что первая строка информации в файле test.ua выводится, а комментарий lua добавляется к последней строке файла. Например, вот что я вывожу: Параметры чтения соответствуют простому режиму. file:seek(optional whence, optional offset): Установить и получить текущую позицию в файле. В случае успеха возвращается окончательная позиция в файле (в байтах). В случае неудачи возвращается ноль плюс сообщение об ошибке. Параметр, откуда берется значение, может быть: Без параметров file: seek () возвращает текущую позицию, file: seek («set») указывает на начало файла, file: seek («end») находит до конца файла и возвращает размер файла. file:flush(): Записать все данные из буфера в файл io.lines(optional file name): Откройте указанное имя файла в режиме чтения и верните итеративную функцию. Каждый вызов будет получать строку содержимого в файле. Когда он достигнет конца файла, он вернет nil и автоматически закроет файл. В следующем примере метод seek используется для поиска 25-й позиции снизу файла и используется параметр * a метода чтения для чтения всего файла с текущей позиции (25-я позиция снизу).
|