LUA : 如何将 html 表格转换成数组进行保存?

我想要提取表格并将其转换为数组,但我不知道如何实现

示例数据:

<table border class="stat"><tr><th>产业</th><th>成本</th><th>收入</th><th>利息</th></tr><tr><td>发电厂</td><td>15 亿</td><td>126.1 百万</td><td><b>0.84%</b></td></tr><tr><td>铁路</td><td>25 亿</td><td>216.2 百万</td><td><b>0.86%</b></td></tr><tr><td>军事基地</td><td>50 亿</td><td>434.4 百万</td><td><b>0.87%</b></td></tr><tr><td>收费公路</td><td>5 亿</td><td>34.9 百万</td><td><b>0.70%</b></td></tr><tr><td>水泵</td><td>10 亿</td><td>77.5 百万</td><td><b>0.78%</b></td></tr></table>

输出数据:

estate[1][1] = "发电厂"
estate[1][2] = "15 亿"
estate[1][3] = "126.1 百万"
estate[1][4] = "0.84%"

estate[2][1] = "铁路"
estate[2][2] = "25 亿"
estate[2][3] = "216.2 百万"
estate[2][4] = "0.86%"
点赞
用户107090
用户107090

模式匹配不是解析HTML的推荐工具,但在这种情况下它可以正常工作。

下面的代码创建了一个具有命名字段而不是数值索引的表格,这可能更有用。

H=[[
<table border class="stat"><tr><th>Estate</th><th>Cost</th><th>Income</th><th>Interest</th></tr><tr><td>Power Station</td><td>15 Bil</td><td>126.1 Mil</td><td><b>0.84%</b></td></tr><tr><td>Railway</td><td>25 Bil</td><td>216.2 Mil</td><td><b>0.86%</b></td></tr><tr><td>Military Base</td><td>50 Bil</td><td>434.4 Mil</td><td><b>0.87%</b></td></tr><tr><td>Toll Road</td><td>5 Bil</td><td>34.9 Mil</td><td><b>0.70%</b></td></tr><tr><td>Water Pump</td><td>10 Bil</td><td>77.5 Mil</td><td><b>0.78%</b></td></tr></table>
]]

local name={}
local n=0
for h in H:gmatch("<th>(.-)</th>") do
    n=n+1
    name[n]=h
    --print(n,h)
end

local estate={}
local n=-1 -- 跳过th
for r in H:gmatch("<tr>(.-)</tr>") do
    n=n+1
    estate[n]={}
    local k=0
    for d in r:gmatch("<td>(.-)</td>") do
        k=k+1
        --print(n,k,d)
        if d:match("<b>") then d=r:match("<b>(.-)</b>") end
        estate[n][name[k]]=d
    end
end

for i=1,#estate do
    for k,v in pairs(estate[i]) do
        print(i,k,v)
    end
end
2017-01-07 09:57:18