Попытка индексировать локальный файл (нулевое значение)? - PullRequest
0 голосов
/ 05 февраля 2020

Я делаю проект в имитаторе короны, который включает чтение некоторых данных из файла csv ("car.csv"), который находится в каталоге проекта, у меня есть этот код, который должен прочитать первую строку, но когда я запускаю его, он выдает ошибку «Попытка индексировать локальный файл» (значение ноль) ». Любая идея, как я могу это исправить?

local function init()
    local path = system.pathForFile( "car.csv", system.DocumentsDirectory );
    local file = io.open(path, "r");
    line = file:read();
    print(line);
end

По какой-то причине он не будет читать это в «файл».

Редактировать: Хорошо, если я использую полный путь, а не относительный путь к файлу, он работает. Но мне нужно использовать относительный, и я не знаю, почему это не работает.

1 Ответ

1 голос
/ 05 февраля 2020

При использовании io.open вы всегда должны убедиться, что это действительно успешно, прежде чем пытаться прочитать файл, иначе вы получите уродливую ошибку «попытка индексировать ноль».

Если вы хотите, чтобы ваша программа чтобы все еще взломать sh, просто сделайте

local file = assert(io.open(path, 'r'))

И это даст вам более полезное сообщение об ошибке, если файл не найден. Кроме того, вы также можете вручную сохранить возвращаемые значения io.open и проверить ошибки:

local file, err, code = assert(io.open(path))
if not file then
   print("Error opening file", path, err)
   -- Do something to handle the error
end
...