Lua字符串连接

3

我正在处理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等。


_G["Map"..l[k]](Process[ks[l[k]]][1], R[1]) - Egor Skriptunoff
@Egor,不行,因为我也有双引号,所以它不能工作,请仔细看一下,(Process["ks.PV1"][1],MsgIn,mg),这正是我需要的。 - systemdebt
你能展示一下 S 中的内容吗? - hjpotter92
@hjpotter92:在S中,我有“MSH,PID,PV1,EVN”等,取决于事件,有时我有这4个,其余时间任意3个或2个。 - systemdebt
2个回答

3

由于您的字符串包含"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

谢谢hjpotter92:顺便说一下,这段代码对我有效,当你建议关于S时,我就想到了。这是有效的代码: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 - systemdebt
@Simrankaur 你可以将解决方案标记为已选择/答案,这样问题就会在问题列表中显示为已解决。 - hjpotter92

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

请考虑给那些被证明有用的答案点赞(甚至接受)。 - user2033018

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接