我如何查看名称并确定它对应表格中的哪个数字?

vars = {} values = {}

function open(file) lex(file) end

function lex(file) local data = io.open(file, "r") local value1 = 0 local value2 = 0 for char in data:lines() do --Print if char:sub(1, 6) == "print:" then print(char:sub(7)) end --Integer if char:sub(1, 2) == "V:" then vars [#vars + 1] = char:sub(3, 5) if char:sub(6, 6) == "=" then values [#values + 1] = char:sub(7) end --print("NAME:"..vars [#vars]..", ".."VALUE:"..values [#values]) end --Add if char:sub(1, 4) == "add:" then for i=1, #vars do if char:sub(5, 7) == vars[i] then value1 = tonumber(values[i]) end if char:sub(9, 11) == vars[i] then value2 = tonumber(values[i]) end end print(value1 + value2) end end --Debug purposes --[[ for k, v in pairs(vars) do print(k, v) end for b, a in pairs(values) do print(b, a) end --]] print("VARS"..vars[1]..","..vars[2]) end

function run() while true do print("Open a file") file = io.read() print("File name:"..file) print("") lex(file) print("") end end

run()

点赞
用户308010
用户308010

尝试执行这段代码。这是你的完整 lex 函数重写。我没有验证它是否有效,也不确定你在最后一个 end 前面要提取哪些数据,但这应该能帮助你。

function lex(file)
    local data = io.open(file, "r")
    local vars = {}
    for char in data:lines() do
        -- 打印
        if char:match("^print:") then
            print(char:match("^print: (.+)"))

        -- 整数
        elseif char:match("^V:") then
            local k, v = char:match("^V: (.+)=(%d+)")
            vars[k] = v

        -- 加
        elseif char:match("^add:") then
            local one, two = char:match("^add: (.+),(.+)")
            if not vars[one] or not vars[two] then
                print("至少一个值缺失。请检查文件中的 " .. one .. " 和 " .. two)
            else
                print(vars[one] + vars[two])
            end
        end
    end
end

你会注意到,我添加了一项检查,以防文件中某个地方缺失了值。

2015-08-17 20:01:41