我是lua的新手,试图了解并将各个部分放在一起并寻求一些帮助。 我已经阅读了有关lua文件循环的现有文章,但无法获得所需的输出。
问题 - 我有一个文件夹,文件夹路径 - .txt
扩展名为list = {}
for i=0,(#Totalfilecount) do
local fr = io.open('D:\Test_Files\Outbound\Client\final\'..filename.,'rb')
local f = fr.read('*.txt')
Customfunction(f) -- Passing file content to customfunction to apply business logic.
end
尝试:
读取每个文件,构建类似于此的循环:
Clicked
问题:
代码应该在Windows上运行。请不要使用外部文件系统函数(例如'lfs')来分享纯lua中的建议,因为我们不想导入外部函数。
任何建议/帮助将不胜感激!
答案 0 :(得分:0)
你不能(至少不应该)在没有Lua扩展的情况下这样做。为此,您必须下载LuaFileSystem库。你可以使用LuaRocks来做到这一点:
$ luarocks install luafilesystem
使用库:
require "lfs"
function dirtree(dir)
assert(dir and dir ~= "", "Please pass directory parameter")
if string.sub(dir, -1) == "/" then
dir=string.sub(dir, 1, -2)
end
local function yieldtree(dir)
for entry in lfs.dir(dir) do
if entry ~= "." and entry ~= ".." then
entry=dir.."/"..entry
local attr=lfs.attributes(entry)
coroutine.yield(entry,attr)
if attr.mode == "directory" then
yieldtree(entry)
end
end
end
end
return coroutine.wrap(function() yieldtree(dir) end)
end
以上代码的示例用法:
for filename, attr in dirtree("D:\Test_Files\Outbound\Client\final") do
print(attr.mode, filename)
end
您必须检查扩展名是否等于txt。要阅读文件扩展名,请使用以下代码段:
function GetFileExtension(path)
return path:match("^.+(%..+)$")
end
所以,为了回答你的问题,你可以通过计算在dirtree中返回的数组中的元素来获取目录中的文件数量。要回答第二个问题,只需使用帖子中的代码即可。您想要的表由dirtree()返回,但您可能只想从中提取.txt文件。要阅读文件,只需检查其他SO答案。您已获得名称(在数组中),因此请使用它。
编辑:您可以解析dir
和ls
命令的结果以获取目录列表,但您不能。通过这种方式,您不需要安装任何库,您的代码将严重依赖操作系统。
在代码中添加库并不是那么糟糕。黑客行为更糟糕。
(不确定文件扩展名提取功能是否正常。我没有在这篇文章中使用过脏代码,它属于David Kastrup)