【发布时间】:2015-04-19 19:27:54
【问题描述】:
我正在尝试使用收到的输入并根据找到的特定输入 (ID#) 构建一个表。此输入还包含我需要解析的变量,并且我使用其他 var 来构建完整的数据字符串。在同一个文件中,是应记录项目的列表。一旦接收到文件并由 Lua 脚本完全解析,它将以特定顺序发送回字符串,该特定顺序也位于接收到的同一文件中.
例如:
收到输入:
Log Entries Received:
ID1 - 9:25AM - 10:15AM - Mike Stephens - 2/12/2015 - 111 Dynamo Dr.
ID2 - 8:07AM - 12:20PM - Gary Roberts - 1/23/2015 - 1212 Badger Way
ID3 - 11:46AM - 1:31PM - Trishia Major - 2/10/2015 - 325 March Manor
ID4 - 2:49PM - 3:13PM - Harry Davis - 12/21/2014 - 844 Anapolis Dr.
ID5 - 7:56AM - 8:47AM - Mary Hudson - 1/19/2015 - 9124 Royal Dr.
ID6 - 9:41AM - 4:16PM - Mark Harrison - 1/29/2015 - 583 Connecticut Rd.
ID7 - 10:25AM - 12:45PM - Jennifer Smith - 12/30/2014 - 42 Rodding Rd.
End of Log Entries
Order to be Sent:
ID3 - ID2 - ID5 - ID1 - ID7 - ID4 - ID6
End of Order
现在ID# 按时间顺序接收... 1、2、3、4 等;直到收到所有输入字符串。在收到的所有这些数据的末尾,是另一个应处理字符串的列表。这是一个完整的文件。
最初,我认为最好有两个单独的表,每个表都在各自独立的函数中构建和维护。第一个函数将接收队列的顺序,将表的键与接收到的顺序中的值(ID#)配对。这发生在下面称为function iD_Order(log_queue) 的函数中。第二个函数将使用输入数据构建完成的字符串,在function string_build(log_input) 中找到。我想建立第二个表,将第二个表的键设置为等于字符串中的 ID#,值等于完成的字符串本身。
我的断开连接将是如何一起使用这两个函数,以便在发送下一个队列时,它会根据接收到的队列来发送。另外,我想这样做,一旦整个队列成功通过,它就会完全删除两个表,以便该过程可以从头开始再次重复。
这是我目前根据信息得出的信息,以及我提供的最佳方法的想法。
function string_build(log_input) -- takes input and creates strings (don't know how to build table found in this function)
t_msg = {}
for iD, time_In, time_Out, usr_Name, date, usr_Addr in input:gmatch("(ID%d)|(.-)|(.-)|(.-)|(.-)|(.-)") do
finish_Str = "Operator Name: "..usr_Name.." (ID#:"..iD..") on "..date.." signed in at "..time_In.." and signed out at "..time_Out.." at "..usr_Addr.." open house location."
end
for k,v in pairs (t_msg) do
t_msg.iD = finish_Str -- I strongly doubt this is correct????
end
end
function iD_Order(log_queue) -- takes queue and puts values = order of ID#'s
t_Queue = {}
for iD_nmbr in log_queue:match("(ID%d)") do
for k,v in pairs (t_Queue) do
table.insert(t_Queue, #t_Queue, iD_nmbr)
end
end
end
function log(input) -- main function that receives outside input and sends it to appropriate functions
local buffer = ""
input = input:gsub("%s-%s", "|")
buffer = buffer..input.."|"
log_input = input:match("Log Entries Received:(.*)End of Log Entries")
log_queue = input:match("Order to be Sent:(.*)End of Order")
if log_input then
string_build(log_input)
buffer = buffer:sub(#log_input)
end
if log_queue then
iD_Order(log_queue)
buffer = buffer:sub(#log_queue)
end
end
这是我不确定最佳做法的地方。总的来说,我对编程相当陌生,我正在努力学习争取的最佳实践/心态。我认为也许,让一个表在完全不同的功能中依赖另一个表可能是不好的做法?我不确定。但是我正在考虑使用另一个函数来从function iD_Order(log_queue) 中获取表格,并使用function string_build(log_input) 创建的字符串并根据iD 变量选择它们可能会很混乱,并且在最后删除表格时可能会导致问题.
如果t_Queue 的键与完成字符串中的iD 变量匹配,我认为最好将完成的字符串直接发送到t_Queue。但我很难弄清楚如何做到这一点。
- 任何有助于了解是否可以通过一两个函数来执行此操作的帮助都很棒。
- 我认为最好在一个函数中完成所有操作,但无法弄清楚。我可以得到一些帮助来解决这个问题吗?
- 在构建整个表并将其发送回另一个源后,删除整个表的最佳方法是什么?这些完成的字符串被发送到已成交的订单。它可以是即时的,也可能需要几个小时。但最后,我希望在发送最终字符串后清除表格。
感谢所有帮助、意见和批评。
【问题讨论】:
标签: lua queue key-value lua-table