This is small example how to collect data only from particular listed fields; to format the result data as tab delimited; and push to Iguana queue for any further processing.
Note: You will need to run this example in a Filter Component
List of fields in scope specified in SegmentFieldsFilter below – MSH-6, MSH-3, PID-3, …
Our test message is
MSH|^~&|AcmeMed|Lab|Main HIS|St. Micheals|20110213144932||ADT^A03|9B38584D9903051F0D2B52CC0148965775D2D23FE4C51BE060B33B6ED27DA820|P|2.6| EVN||20110213144532||||20110213145902| PID|||4525285^^^ADT1||Smith^Tracy||19980210|F||Martian|86 Yonge St.^^ST. LOUIS^MO^51460|||||||10-346-6|284-517-569| NK1|1|Smith^Gary|Second Cousin| PV1||E||||||5101^Garland^Mary^F^^DR|||||||||||1318095^^^ADT1|||||||||||||||||||||||||20110213144956| OBX|||WT^WEIGHT||102|pounds| OBX|||HT^HEIGHT||32|cm|
… and this is complete screenshot of our project
… and for 2nd OBX segment …
… and final result …
Assumed to use some sort of HL7 message with corresponding vmd file to indicate Segments Grammar.
The vmd file for this example is attached below.
… and the code snippet for entire project …
function main(Data) Msg,Name=hl7.parse{vmd='19137.vmd', data=Data} queue.push{data=Convert()} end local SegmentFieldsFilter = { MSH={6, 3}, PID={3, 4, 6, 8, 9}, OBX={3, 4, 6, 7, 8, 12} } function Convert() return Msg:tabDelimitedFields(SegmentFieldsFilter) -- You can strip off the trailing \t character if you want end function node.tabDelimitedFields(Node, Filter) local R = '' for i=1, #Node do if Node[i]:nodeType() == 'segment' and not Node[i]:isNull() and Filter[Node[i]:nodeName()] then local FieldFilter = Filter[Node[i]:nodeName()] for j=1,#FieldFilter do R = R..Node[i][FieldFilter[j]]:S()..'\t' end elseif Node[i]:nodeType() == 'segment_repeated' then R = R..Node[i]:tabDelimitedFields(Filter) elseif Node[i]:nodeType() == 'segment_group' then R = R..Node[i]:tabDelimitedFields(Filter) end end R=R:gsub('%^','%\t') return R end