现在我尝试使用Lua从外部源发出的条形码接收变量。当我运行此操作时,rotation
中的变量local function rot(input)
似乎是"错误"。如果我完全按照下面的print
语句运行此代码,rotation
将会出现并消失。请帮助我理解为什么会发生这种情况?
请注意:我目前正在处理此代码的两个方面。 A)Code128没有正确检索变量。 B)我的代码肯定可以缩短。但是我和我一起学习并学习。这个主题的主要目的是帮助我理解为什么代码有时会显示所需的结果,然后在下一分钟就赢了?
谢谢。
编辑:我已经更新了一些代码以使其更清晰。将所有string.match
语句压缩到包含其他条形码相关字段的表中。仍在学习并希望让它更清洁。我喜欢学习这个,但我仍然遇到local function rot(input)
同样的问题,并且得到了间歇性的结果。非常感谢任何帮助!
local function rot(input)
rotTable = {["R"] = "cw", ["I"] = "180", ["B"] = "ccw"}
for k,v in pairs (rotTable) do
if input == k then
rotation = v
else
rotation = ""
end
end
return rotation
end
local function barCode(input)
local bcID = string.match(input,"%^(B%w)")
if bcID == "BY" then
bcID = string.match(input,"%^BY.*%^(B%w)")
end
local bcTable = {
["BC"] = {"code128", 10, string.match(input,"%^BY.*%^BC(%u),(%d*),(%u),%u,%u%^FD(.*)%^FS")},
["B2"] = {"bc2of5i", 20, string.match(input,"%^B2(%u),(%d*),(%u),%u,%u%^FD(.*)%^FS")},
["BE"] = {"ean13", 10, string.match(input,"%^BE(%u),(%d*),(%u),%u%^FD(.*)%^FS")},
["B8"] = {"ean8", 10, string.match(input,"%^B8(%u),(%d*),(%u),%u%^FD(.*)%^FS")},
["B3"] = {"code39", 10, string.match(input,"%^B3(%u),%u,(%d*),(%u),%u%^FD(.*)%^FS")},
["BU"] = {"upc_a", -1, string.match(input,"%^BU(%u),(%d*),(%u),%u%,%u^FD(.*)%^FS")}
}
for k,v in pairs (bcTable) do
if bcID == k then
bcFields = v
bcType, qzone, bcR, bcH, bcHr, bcData = unpack(bcFields)
end
end
hPos = 0
vPos = 0
bcOutput = '<'..bcType..' qzone=\"'..qzone..'\" hbb=\"0\" vbb=\"0\" bbwidth=\"1\" hpos=\"'..hPos..'\" vpos=\"'..vPos..'\" rotation = \"'..rot(bcR)..'\" bgcolor=\"0\" barcolor=\"255\" textcolor=\"255\" barwidth=\"1\" height=\"8\">'..bcData..'</'..bcType..'>'
return bcOutput
end
print(barCode("^BY3^BCN,102,N,N^FDCHF05000042^FS"))
print(barCode("^B2B,110,N,N,N^FD45681382^FS"))
print(barCode("^BUN,183,N,N,N^FD61414199999^FS"))
print(barCode("^B8I,146,N,N^FD212345645121^FS"))
print(barCode("^BEB,183,N,N^FD211234567891^FS"))
答案 0 :(得分:1)
我不确定您的代码有什么问题,如果有的话,rot
可以更简单地编写为
local rotTable = {["R"] = "cw", ["I"] = "180", ["B"] = "ccw"}
local function rot(input)
return rotTable[input] or ""
end
通常,您不需要搜索Lua表。例如,循环for k,v in pairs (bcTable) do
可以通过索引替换,如上面的代码所示。