2014-03-12 2 views
3

Я работаю на 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, кс. PID, ks.PV1 - это таблицы в базе данных. Теперь я хочу, чтобы автоматизировать часть этого процесса, используя функцию gmatch, представленную в Lua и у меня это до сих пор

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

' _G [«Карта» .. l [k]] (Процесс [ks [l [k]]] [1], R [1]) ' –

+0

@Egor, Нет, поскольку у меня также есть двойные кавычки, он не работает , Пожалуйста, присмотритесь , (Process ["ks.PV1"] [1], MsgIn, mg), Это то, что мне нужно –

+0

Можете ли вы показать, что у вас есть на 'S'? – hjpotter92

ответ

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 
+0

Спасибо hjpotter92: кстати, этот код работал от меня, я подумал о том, как только вы предложили о S.Here - это код, который сработал: ks = { MSH = "ks.MSH", EVN = "ks.EVN", PID = "ks.PID", PV1 = "ks.PV1", PV2 = "ks.PV2"} S = tostring (R [1]. AllSegmentsList) l = {} k = 1 для u в строке.gmatch (S, "([^,% s] +)") do l [k] = u _G ["Карта" .. l [k]] (Процесс [ks [l [k]]] [1], MsgIn, mg) k = k + 1 –

+0

@Simrankaur Вы можете пометить решение как выбраное/ответное, и вопрос появится как таковой в списке вопросов. – hjpotter92

1

@Egor, Нет, поскольку у меня есть двойные кавычки вокруг Кроме того, это не работает. Пожалуйста, присмотритесь внимательно (Process ["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 
+0

@Egor, это тоже не работает. error говорит -attempt называть поле '?' (значение nil) –

1

Вот что, наконец, работал, спасибо Егор и 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 
+0

Подумайте над тем, чтобы подтвердить (и даже принять) ответ, который оказался полезным. –

Смежные вопросы