Modify the Birthdate
Contents
We have a great secret weapon for parsing arbitrary dates and times: tt’s a fuzzy date/time parser library which can parse many date formats automatically.
We’ll need to have require('dateparse')
in place:
require 'dateparse'
Then this code snippet does the trick:
os.date()
is part of the standard Lua library. For more information on the fuzzy date/time parser, see the wiki.
If you have gotten out of sync with us up until this point then here is the code to get you caught up:
require 'split' require 'zsegment' require 'diff' require 'hl7util' require 'dateparse' local function trace(a,b,c,d) return end function main(Data) local Orig = hl7.parse {vmd = 'transform.vmd', data = Data} if Orig:nodeName() == 'Catchall' then iguana.logInfo('Filtered '..Orig.MSH[9][1]..'^'..Orig.MSH[9][2]) return end local Out = hl7.message{vmd = 'transform.vmd', name = Orig:nodeName()} Out:mapTree(Orig) local Copy = zsegment.copyZSegments(Data, Out:S()) CheckTransform(Data:StripLastReturns(), Copy:StripLastReturns()) AlterMSH(Out.MSH) local PID = hl7util.findSegment(Out, FindPID) if PID then AlterPID(PID) end trace(Out) local Diff = diff.Compare(Orig:S(), Out:S(), 'transform.vmd') local DataOut = Out:S() DataOut = zsegment.copyZSegments(Data, DataOut) DataOut = DataOut:StripLastReturns() trace(DataOut) queue.push{data = DataOut} end function FindPID(Segment) if Segment:nodeName() == 'PID' then return true end end function AlterPID(PID) local Date = dateparse.parse(PID[7]:nodeValue()) PID[7][1] = os.date('%Y%m%d', Date) return PID end function AlterMSH(MSH) MSH[3][1] = 'Acme' MSH[4][1] = 'Lab' return MSH end function CheckTransform(Orig, Copy) if Orig ~= Copy then trace(Orig) trace(Copy) error('Copy of HL7 message does not match the original') end end function string.StripLastReturns(S) -- strip return(s) "\r" & "\n" from the end of a string local i = #S while S:byte(i) == 10 or S:byte(i) == 13 do i = i - 1 end return S:sub(1,i) end
Continue: String munching galore...