如何解析给定的配置文件,创建一个所需的lua表格?

我想解析一个包含以下信息的配置文件:

[MY_WINDOW_0]
Address = 0xA0B0C0D0
Size = 0x100
Type = cpu0

[MY_WINDOW_1]
Address = 0xB0C0D0A0
Size = 0x200
Type = cpu0

[MY_WINDOW_2]
Address = 0xC0D0A0B0
Size = 0x100
Type = cpu1

将其转换为以下LUA表格

CPU_TRACE_WINDOWS =
{
  ["cpu0"] = {{address = 0xA0B0C0D0, size = 0x100},{address = 0xB0C0D0A0, size = 0x200},}
  ["cpu1"] = {{address = 0xC0D0A0B0, size = 0x100},...}
}

我尝试使用一些基本的LUA字符串操作函数,但由于每个部分中重复使用了'Address'、'Size'、'Type'等字符串,无法得到所需的输出。而我的实际配置文件非常庞大,包含20个这样的节。

我已经尽力了,这基本上是代码的一个部分,剩下的部分将只是逻辑的重复。

OriginalConfigFile = "test.cfg"
os.execute("cls")

CPU_TRACE_WINDOWS = {}
local bus
for line in io.lines(OriginalConfigFile) do
  if string.find(line, "Type") ~= nil then
    bus = string.gsub(line, "%a=%a", "")
    k,v = string.match(bus, "(%w+) = (%w+)")
    table.insert(CPU_TRACE_WINDOWS, v)
  end
end

基本上我遇到的问题是关于生成所需的LUA表格结构。这里的v是字符串'Type'的不同的值。我在使用表格排列方面遇到了问题。我目前正在努力找到解决方案,但同时我想询问一下是否可以得到帮助。

点赞
用户308010
用户308010

这应该对你有用。只需将文件名更改为存储配置文件的位置即可。

f,Address,Size,Type = io.input(“configfile”),“”,“”,“”
CPU_TRACE_WINDOWS = {}

for line in f:lines()do
   if line:find(“MY_WINDOW”)then
        Type = “”
        Address = “”
        Size = “”
    elseif line:find("=") then
        _G [line:match("^%a+")] = line:match("[%d%a]+$")

        if line:match("Type") then
            if not CPU_TRACE_WINDOWS [Type] then
                CPU_TRACE_WINDOWS [Type] = {}
            end
                table.insert(CPU_TRACE_WINDOWS [Type],{address = Address,size = Size})
            end
        end
    end
end

它搜索MY_WINDOW短语并重置变量。如果CPU_TRACE_WINDOWS中存在表,则仅会追加一个新的表值,否则仅会创建它。请注意,这取决于Type始终是最后一个条目。如果在任何地方切换,则不会有所有必需的信息。可能有一种更干净的方法来做到这一点,但这有效(在我的一端测试过)。

编辑:哎呀,忘记更改中间的变量了,如果MY_WINDOW匹配,则需要进行更正。

编辑2:清除了table.insert中的冗余。只需要一次就可以,只需要确保先创建表即可。

2019-04-04 20:45:58