我目前正在尝试串行解析从外部源发送的数据。一个例子就是这样:
DATA|0|4|7x5|1|25|174-24|7x5|1|17|TERW|7x5|1|9|08MN|7x5|1|1|_
这些数据可以有许多不同的长度,但前几个部分都是相同的。每个“片段”最初都带有CRLF,所以我用string.gsub(input,"\r\n","|")
替换它们,这就是为什么我的输入看起来像它的方式。
我要解析的部分是:
4|7x5|1|25|174-24|7x5|1|17|TERW|7x5|1|9|08MN|7x5|1|1|_
“4”告诉我总共有四行来创建这个文件。我正在使用它作为设置循环中传递量的方法。 7x5是字体高度。 1是xpos。 25是ypos。 可变数据(在这种情况下为172-24)是这些参数的文本。 如您所见,它应该继续在收到的输入字符串中循环此模式。现在“4”实际上可以是任何变量> 0;每个数字等于一组四个要捕获的变量。
这是我到目前为止所拥有的。请原谅loop
变量,start
变量和print
命令。我正在使用Linux来运行此功能以尝试进行故障排除。
function loop_input(input)
var = tonumber(string.match(val, "DATA|0|(%d*).*"))
loop = string.match(val, "DATA|0|")
start = string.match(val, loop.."(%d*)|.*")
for obj = 1, var do
for i = 1, 4 do
if i == 1 then
i = "font" -- want the first group to be set to font
elseif i == 2 then
i = "xpos" -- want the second group to be set to xpos
elseif i == 3 then
i = "ypos" -- want the third group to be set to ypos
else
i = "txt" -- want the fourth group to be set to text
end
obj = font..xpos..ypos..txt
--print (i)
end
objects = objects..obj -- concatenate newly created obj variables with each pass
end
end
val = "DATA|0|4|7x5|1|25|174-24|7x5|1|17|TERW|7x5|1|9|08MN|7x5|1|1|_"
print(loop_input(val))
理想情况下,我想创建一个循环,根据var
变量,将在管道分隔符之间插入捕获的变量,然后我可以随意使用它们。当试图用我的四个变量(如上所述)的括号进行故障排除时,我连续四次收到四个变量的完整列表。现在我很难在输入字符串中循环并实际抓住它们,因为循环向下移动数据字符串。我当时认为使用管道作为相互描述变量的手段会有所帮助。我错了吗?如果没关系,我可以保留[/r/n]+
而不是每个"|"
,那么我绝对是为了这一切。
我已经四处搜索并发现了一些我认为会有所帮助的线程,但我不确定表格或分割输入是否可取。像这些线程一样:
Setting a variable in a for loop (with temporary variable) Lua
How do I make a dynamic variable name in Lua?
Most efficient way to parse a file in Lua
我是编程和尝试自学的新手。所以请原谅我的初学者帖子。我有平装书中的“Lua参考手册”和“Lua编程”书籍,这就是我试图模仿我的功能的方法。但是我在连接方面遇到了问题。
感谢大家提供的任何意见或指导!
干杯。
答案 0 :(得分:1)
试试这个:
val = "DATA|0|4|7x5|1|25|174-24|7x5|1|17|TERW|7x5|1|9|08MN|7x5|1|1|_"
val = val .. "|"
data = val:match("DATA|0|%d+|(.*)$")
for fh,xpos,ypos,text in data:gmatch("(.-)|(.-)|(.-)|(.-)|") do
print(fh,xpos,ypos,text)
end