Я пытаюсь получить имя всех файлов сохраняются в двух папках, имя сохраняются как:Сканирование папок с использованием Lua
1.lua 2.lua 3.lua 4.lua and so on
имя папки являются:
first folder : "/const/"
second folder: "/virt/"
, что Я пытаюсь сделать только получить количество файлов, и это работает, но не в правильном порядке, когда я получаю файл 17
, например, я получаю 17-ю передачу от функции до 15, и это вызывает у меня проблему здесь код функции, которую я использую:
local virt_path = "/virt/"
local const_path = "/const"
local fs = require "lfs"
local const = {}
for num = 1, (numberoffile)do -- numberoffile is predfined and can't be change
const[num] = assert(
dofile (const_path .. mkfilename(num)),
"Failed to load constant ".. num ..".")
end
local function file_number() --this is the function that causes me a headach
local ci, co, num = ipairs(const)
local vi, vo, _ = fs.dir(virt_path)
local function vix(o)
local file = vi(o)
if file == nil then return nil end
local number = file:match("^(%d+).lua$")
if number == nil then return vix(o) end
return tonumber(number)
end
local function iter(o, num)
return ci(o.co, num) or vix(o.vo, num)
end
return iter, {co=co, vo=vo}, num
end
Как я уже сказал, функция delive возвращает значения возврата, но не правильный арифметический порядок.
любая идея, что я делаю неправильно здесь?
У вас есть 2 варианта: 1. получить все файлы в таблице, сортировать и перебирать эту таблицу; 2. итерации по числу (1..N) и проверьте, существует ли этот файл (это работает, если у вас нет отверстий) – moteus
@moteus вы могли бы привести конкретный пример этого? – Engine