4

わかりました、私は物事を複雑にしすぎたと思います、そして今私は道に迷っています。基本的に、これをPerlからLuaに翻訳する必要があります。

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

}
close(FILE);

これまで私はこれを書いてきました:

for Line in io.lines("/proc/meminfo") do
    if Line:find("MemTotal") then
        Mem = Line
        Mem = string.gsub(Mem, ".*", ".*", 1)
    end
end

しかし、それは明らかに間違っています。何が得られないのですか?なぜそれが間違っているのか、それが実際に何をしているのか、そしてなぜ私がそうするのかを理解しています

print(Mem)

戻ります

.*

しかし、私はそれを行うための適切な方法が何であるかを理解していません。正規表現は私を混乱させます!

4

2 に答える 2

3

以下のコードは、そのファイルの内容を解析し、それをテーブルに配置します。

meminfo={}
for Line in io.lines("/proc/meminfo") do
    local k,v=Line:match("(.-): *(%d+)")
    if k~=nil and v~=nil then meminfo[k]=tonumber(v) end
end

その後、あなたはただすることができます

print(meminfo.MemTotal)
于 2010-07-15T12:03:29.780 に答える
2

Luaは正規表現を使用しません。Luaでのパターンマッチングと置換のしくみ、および正規表現との違いを理解するには、Luaでのプログラミングのセクション20.1以降を参照してください。

あなたの場合、完全な文字列(.*)をリテラル文字列に置き換えて.*います。返されるのは当然のことです.*

元の正規表現は、コロン(.*:(.*))を含むものをコロンの後の部分に置き換えたため、Luaでの同様のステートメントは次のようになります。

string.gsub(Mem, ".*:(.*)", "%1")
于 2010-07-15T10:34:10.243 に答える