- Author:
- WeiweiAi <wai484@aucklanduni.ac.nz>
- Date:
- 2023-04-04 15:51:18+12:00
- Desc:
- Add a steady state example
- Permanent Source URI:
- https://models.fieldml.org/workspace/6bc/rawfile/a7940fcacd455a09bdb7beac0da91eca79cf1adb/Scripts/readComp.m
function comp=readComp(filename,compname)
fid = fopen(filename);
comp={};
tline = fgetl(fid);
vars=[];
k = 0; % Counter for components.
while ischar(tline)
compLocation = strfind(tline, '<component name=');
if ~isempty(compLocation)
temp_name=string(extractBetween(tline,'"','"'));
end
if ~isempty(compLocation)&& ~isempty(find(compname==temp_name,1))% only save the specified component
k = k + 1;
comp(k).name=string(extractBetween(tline,'"','"'));
comp(k).children=[];
end
compEnd=strfind(tline, '</component>');
if ~isempty(compEnd) && ~isempty(find(compname==temp_name,1))
comp(k).vars=vars;
vars=[];
end
varLocation = strfind(tline, '<variable');
if ~isempty(varLocation) && ~isempty(find(compname==temp_name,1))
vname=string(extractBetween(tline,'name="','"'));
unit=string(extractBetween(tline,'units="','"'));
init=string(extractBetween(tline,'initial_value="','"'));
pub=string(extractBetween(tline,'public_interface="','"'));
priv=string(extractBetween(tline,'private_interface="','"'));
ctg="para"; %default category is parameter
if isempty(init)
init="none";
else
if (pub=="out")
ctg=pub;
else
ctg="interVar";
end
end
if isempty(pub)
pub="none";
ctg="interVar";
else
if pub=="out" %cannot be para; if "in", could be para or input, need to manually check later
ctg=pub;
end
end
if isempty(priv)
priv="none";
end
var=[vname,init,unit,init,pub,priv,"",ctg];
vars=[vars;var];
end
tline = fgetl(fid);
end
fclose(fid);
end