read_xml.lua
NAME
read_xml
FUNCTION
read_xml(fname)
NOTES
Reads data from a XML file.
The file must have a data section as follows
< data nrow="2" ncol="3" >
11.9 22.5 33.9876
10.3 3.1 20.6633
< /data >
INPUTS
fname - file name
OUTPUTS
a zeArray object
SOURCE
require("register")
function read_xml(fname)
local ivec = 0
local tag = nil
local nele = 0
local nvec = 0
local flag = false
local arr = nil
local xml = zeAux.new("xml")
xml:callback("f1", "f2", "f3")
f1 = function(n, s, t) -- tart tag
tag = s
if (t) then
for k, v in t do
if (k == "nrow") then nele = tonumber(v); end
if (k == "ncol") then nvec = tonumber(v); end
end
end
if (s == "data" and nele > 0 and nvec > 0) then
arr = zeUtl.new("double")
arr:resize(nele, nvec)
nele = 0;
nvec = 0;
flag = true
end
end
f2 = function(n, s) -- end tag
tag = nil
end
f3 = function(n, s, l) -- xml data
if (not xml.isblank(s) and flag == true) then
if (tag == "data" ) then
arr:parse(ivec, s)
ivec = ivec + 1
end
end
end
for line in io.lines(fname) do
xml:parse(line)
end
return arr
end