Lua String连接

时间:2014-03-12 15:58:53

标签: string lua string-concatenation

我正在研究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等

3 个答案:

答案 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)

@Egor,不,因为我也有双引号,它不起作用,请仔细看看,(过程[" ks.PV1"] [1],MsgIn, mg),这正是我需要的


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