我正在研究Lua,我有这种代码
MapMessage(Process["ks.MSH"][1], MsgIn, mg)
MapEvent(Process["ks.EVN"][1], MsgIn, mg)
MapPatient(Process["ks.PID"][1], MsgIn, mg)
MapVisit(Process["ks.PV1"][1],MsgIn,mg)
在上面的语句中,MapMessage,MapEvent,MapPatient,MapVisit是函数,ks.MSH,ks.EVN,ks.PID,ks.PV1是数据库中的表。 现在,我想使用lua中提供的gmatch函数自动执行此过程的一部分,到目前为止我有这个
for u in string.gmatch(S, "([^,%s]+)"), 1 do
l[k] = u
_G["Map"..l[k]](Process["ks[l[k]]"][1], R[1])
k=k+1
end
但是上面代码第三行中的连接部分并没有真正使它成为ks.MSH,ks.PID,ks.PV1等,所以请建议代替(Process["ks[l[k]]"][1]
需要的内容s.MSH,ks.PID,ks.PV1等
答案 0 :(得分:2)
由于您的字符串包含"MSH, PID, PV1, EVN"
,因此您必须使用哈希表或查找表。该计划将是这样的:
S = "MSH, PID, PV1, EVN"
tLookup = {
MSH = "Message",
EVN = "Event",
PID = "Patient",
PV1 = "Visit",
}
for u in S:gmatch "([^,%s]+)" do
sNameOfFunction = tLoopup[u]
_G[ "Map"..sNameOfFunction ] ( Process["ks."..u][1], MsgIn, mg )
k=k+1
end
甚至是这样的事情:
S = "MSH, PID, PV1, EVN"
tLookup = {
MSH = _G.MapMessage,
EVN = _G.MapEvent,
PID = _G.MapPatient,
PV1 = _G.MapVisit,
}
for u in S:gmatch "([^,%s]+)" do
tLoopup[u] ( Process["ks."..u][1], MsgIn, mg )
k = k+1
end
答案 1 :(得分:1)
ks = {Message = "ks.MSH", Event = "ks.EVN", Patient = "ks.PID", Visit = "ks.PV1"}
S = "Message, Event, Patient, Visit"
l = {}
k = 1
for u in string.gmatch(S, "([^,%s]+)") do
l[k] = u
_G["Map"..l[k]](Process[ks[l[k]]][1], MsgIn, mg)
k=k+1
end
答案 2 :(得分:1)
这是最终奏效的,感谢Egor和hjpotter92 :)
ks = {MSH = "ks.MSH", EVN = "ks.EVN", PID = "ks.PID", PV1 = "ks.PV1", PV2 = "ks.PV2"}
S = tostring(R[1].AllSegmentsList)
l = {}
k = 1
for u in string.gmatch(S, "([^,%s]+)") do
l[k] = u
_G["Map"..l[k]](Process[ks[l[k]]][1], MsgIn, mg)
k=k+1
end