Lua中使用目录路径的字符串查找

我需要将这段 Perl 代码翻译成 Lua

open(FILE, '/proc/meminfo');
while(<FILE>)
{
    if (m/MemTotal/)
    {
        $mem = $_;
        $mem =~ s/.*:(.*)/$1/;
    }
    elseif (m/MemFree/)
    {
        $memfree = $_;
        $memfree =~ s/.*:(.*)/$1/;
    }
}
close(FILE);

目前我已经写了这个

while assert(io.open("/proc/meminfo", "r")) do
    Currentline = string.find(/proc/meminfo, "m/MemTotal")
    if Currentline = m/MemTotal then
        Mem = Currentline
        Mem = string.gsub(Mem, ".*", "(.*)", 1)
    elseif m/MemFree then
        Memfree = Currentline
        Memfree = string.gsub(Memfree, ".*", "(.*)", 1)
    end
end
io.close("/proc/meminfo")

现在,当我尝试编译时,我会得到有关我的代码第二行的以下错误

luac: Perl to Lua:122: unexpected symbol near '/'

显然,在 string.find 中使用目录路径的语法不像我写的那样。我的问题是“How是它?”

原文链接 https://stackoverflow.com/questions/3193764

点赞
stackoverflow用户206020
stackoverflow用户206020

使用 io.lines 可以逐行迭代文件。

for line in io.lines("/proc/meminfo") do
    if line:find("MemTotal") then --// 这是 string.find(line, "MemTotal") 的语法糖。
        --// 在这里进行逻辑判断...
    elseif --// 我不太理解你代码中的这一部分。
    end
end

之后不需要关闭文件。

2010-07-07 10:17:29
stackoverflow用户385433
stackoverflow用户385433

你不必局限于 Perl 的控制流。Lua有一个非常好用的“gmatch”函数,可以迭代字符串中的所有可能匹配项。以下是一个解析 /proc/meminfo 并将其返回为表格的函数:

function get_meminfo(fn)
    local r={}
    local f=assert(io.open(fn,"r"))
    -- 将整个文件读入 s
    local s=f:read("*a")
    -- 现在枚举所有 "SomeName: SomeValue" 的出现,将 SomeName 和 SomeValue 的文本分配给 k 和 v
    for k,v in string.gmatch(s,"(%w+): *(%d+)") do
            -- 保存至表格:
        r[k]=v
    end
    f:close()
    return r
end
-- 使用
m=get_meminfo("/proc/meminfo")
print(m.MemTotal, m.MemFree)
2010-07-07 10:54:03