Lua 字符串连接

我正在使用 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.MSHks.PIDks.PV1 等,所以请建议在 (Process["ks[l[k]]"][1] 的位置上需要什么来获取 ks.MSHks.PIDks.PV1 等。

点赞
用户1190388
用户1190388

由于你的字符串包含 "MSH,PID,PV1,EVN",你需要使用哈希表或查找表。程序应该像这样:

S = “MSH,PID,PV1,EVN”
tLookup = {
    MSH = “消息”,
    EVN = “事件”,
    PID = “患者”,
    PV1 = “访问”,
}

for u in S:gmatch “([^,%s] +)” do
    sNameOfFunction = tLookup [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
    tLookup [u](Process [“ks。”..u] [1],MsgIn,mg)
    k = k + 1
end
2014-03-12 17:19:34
用户2699001
用户2699001

这是最终有效的代码,感谢 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
2014-03-12 17:23:54