невозможно открыть prog.lua: нет такого файла или каталога - PullRequest
0 голосов
/ 03 ноября 2018

Эта следующая программа преобразует текстовый файл из формата Windows в формат POSIX (это означает, что она переводит последовательность символов возврата каретки в новую строку)

    local inp = assert(io.open(arg[1], "rb"))
    local out = assert(io.open(arg[2], "wb"))

    local data = inp:read("a")
    data = string.gsub(data, "\r\n", "\n")
    out:write(data)

    assert(out:close())

Вот пример, который я хочу преобразовать

    print("Hello World!")
    print("\r\n")

Мы можем вызвать скрипт из оболочки, используя формат lua [options] [script [args]]. Итак, я набираю prog.lua, который является файлом lua, и файл с примером, который я хочу преобразовать, называется example.lua, чтобы он сохранялся в arg [1] и arg [2]:

    >prog.lua exampe.lua example.lua

после этого я получаю эту ошибку:

    C:\Program Files\Lua\5.3\prog.lua:1: bad argument #1 to 'open' (string 
    expected, got nil)
    stack traceback:
    [C]: in function 'io.open'
    C:\Program Files\Lua\5.3\prog.lua:1: in main chunk
    [C]: in ?

Я думаю, что это вывод из первого аргумента вызова функции в io.open (arg [1], "rb") в первой строке. Но я не могу понять, почему происходит ошибка, поскольку файл примера должен храниться в arg [1] и arg [2], но конвертер все равно выдает ошибку. Какие-нибудь решения, чтобы я мог решить эту проблему?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 ноября 2018

Это функция Windows (или ошибка).

Когда Lua запускается напрямую, все аргументы arg1 arg2 arg3 передаются в сценарий (как внутри arg таблицы, так и внутри vararg ...)

C:\> lua.exe program.lua arg1 arg2 arg3

Когда расширение .LUA объявлено исполняемым (как в вашей системе), вы можете опустить lua.exe в командной строке, но аргументы НЕ передаются в сценарий Lua.

C:\> program.lua arg1 arg2 arg3

Вот почему ваш arg[1] является nil.
Вы должны начать свою командную строку с lua.exe, чтобы передать аргументы в ваш скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...