Zip a folder containing multiple files
Verified
Added by iNTERFACEWARE
How to use an external command program to zip up a folder containing multiple files
Source Code
-- follows best practice by using local functions
-- these need to be placed before the main() module
-- therefore main() is at the end of the code
local function zip(folder)
--Opens folder and reads in all files and adds to zip
local fld = io.popen([[ls ]]..folder..[[/]])
local allFls = fld:read('*a')
local fls = allFls:split('\n')
trace(fls)
local script = [[zip ']]..folder..[[2.zip']]
for i=1, #fls do
script = script..[[ -xi ']]..folder..[[/]]..fls[i]..[[']]
end
io.popen(script..[[ -j]])
end
local function createDirectory(folderName)
io.popen('mkdir -p '..folderName)
--I added a timer to ensure enough time to create folder before creating the files.
--Iguana is just too fast sometimes for the Operating system!
--Test to figure out if you need to throttle at all with your setup.
util.sleep(2000)
end
--This is just so we have files to work with.
--Your setup will be different for what files you work with.
local function createFiles(Msg, Id)
local X = xml.parse{data=xml_template}
X.Patient.Id[1] = Id
--WARNING this is just a sample your vmd may be different
X.Patient.Lastname[1] = Msg.PID[5][1][1][1]
X.Patient.Firstname[1] = Msg.PID[5][1][2]
local f1 = io.open(Id.."/"..Id..[[.xml]], 'w')
f1:write(tostring(X))
f1:close()
local f2 = io.open(Id.."/"..Id..[[.txt]], 'w')
f2:write(tostring(X))
f2:close()
end
xml_template = [[###]]
function main(Msg)
--Parse incoming message and get Patient id to use for folder and file names
local Inbound, Name = hl7.parse{vmd='example/demo.vmd',data=Msg}
local Id = Inbound.PID[3][1][1]:nodeValue()
--Create a folder for patient in Iguana Folder
createDirectory(Id)
--Create Multiple Files; I create an xml and a txt just to show how to
--compress two or more files. You could use os.rename to get an image or other file
createFiles(Inbound, Id)
--zip up the folder
zip('/Applications/iNTERFACEWARE-Iguana/'..Id)
end
Description
How to use an external command program to zip up a folder containing multiple files
Attachments
Usage Details
This example shows how to zip a folder using Info zip on a Mac. You can use other utilities like winzip, 7-Zip or even Winrar on Windows.
Note: To compress or decompress a single file you can use Iguana’s built in tools for gzip or bzip2 found here.
How to use the code:
- Paste it into a script or load the attached project zip
- Load some HL7 messages, you can use the the attached SampleData.txt
Note: The project already contains the sample data - Examine the code and annotations to see how it works
Note: You will need to change the script generation in the “zip” function to use it on Windows
More Information