1 |
cnh |
1.1 |
function y = mit_getparm(fname,pname); |
2 |
|
|
%function y = mit_getparm(fname,pname); |
3 |
|
|
|
4 |
|
|
y = []; |
5 |
|
|
[fp, msg] = fopen(fname,'r'); |
6 |
|
|
if fp > 0 |
7 |
|
|
str{1} = []; |
8 |
|
|
notfound = 0; |
9 |
|
|
while isempty(mystrfind(str{1},pname)) |
10 |
|
|
str{1} = fgetl(fp); |
11 |
|
|
if ~ischar(str{1}); % this catches the end of file (not very clean) |
12 |
|
|
notfound = 1; |
13 |
|
|
break; |
14 |
|
|
end |
15 |
|
|
% clear again if commented |
16 |
|
|
if ~isempty(mystrfind(str{1},'#')) |
17 |
|
|
str{1} = []; |
18 |
|
|
end |
19 |
|
|
end |
20 |
|
|
if notfound |
21 |
|
|
disp(['Warning: ' pname ' not found in ' fname]) |
22 |
|
|
y=[]; |
23 |
|
|
% disp([' setting ' pname ' to zero']) |
24 |
|
|
% y = 0; |
25 |
|
|
else |
26 |
|
|
teststr = []; |
27 |
|
|
% find the termination of parameter pname |
28 |
|
|
% (next line with an '=' sign |
29 |
|
|
% or with a namelist termination character '&' or '/') |
30 |
|
|
n = 1; |
31 |
|
|
while ( isempty(mystrfind(teststr,'=')) & ... |
32 |
|
|
isempty(mystrfind(teststr,'&')) & ... |
33 |
|
|
isempty(mystrfind(teststr,'/')) ) |
34 |
|
|
n = n + 1; |
35 |
|
|
teststr = fgetl(fp); |
36 |
|
|
str{n} = teststr; |
37 |
|
|
if ~ischar(teststr); break; end |
38 |
|
|
end |
39 |
|
|
eqind = findstr(str{1},'='); |
40 |
|
|
y = str{1}(eqind+1:end-1); |
41 |
|
|
% check whether it is a string in quotes or something else |
42 |
|
|
quotes = findstr(y,''''); |
43 |
|
|
if ~isempty(quotes) |
44 |
|
|
y(quotes(2):end) = []; |
45 |
|
|
y(1:quotes(1)) = []; |
46 |
|
|
else |
47 |
|
|
if ~( strcmpi(y,'.TRUE.') | strcmpi(y,'.FALSE.') ) |
48 |
|
|
y = convert_str2num(str{1}(eqind+1:end-1)); |
49 |
|
|
for k=2:n-1 |
50 |
|
|
y = [y; convert_str2num(str{k}(eqind+1:end-1))]; |
51 |
|
|
end |
52 |
|
|
% $$$ y = str2num(str{1}(eqind+1:end-1))'; |
53 |
|
|
% $$$ for k=2:n-1 |
54 |
|
|
% $$$ y = [y; str2num(str{k}(eqind+1:end-1))']; |
55 |
|
|
% $$$ end |
56 |
|
|
end |
57 |
|
|
end |
58 |
|
|
end |
59 |
|
|
fclose(fp); |
60 |
|
|
else |
61 |
|
|
error([fname ' could not be opened: ' msg]) |
62 |
|
|
end |
63 |
|
|
|
64 |
|
|
return |
65 |
|
|
|
66 |
|
|
function y = convert_str2num(str) |
67 |
|
|
|
68 |
|
|
% take care of the n*value format |
69 |
|
|
stars = findstr(str,'*'); |
70 |
|
|
if isempty(stars) |
71 |
|
|
y = str2num(str)'; |
72 |
|
|
else |
73 |
|
|
if length(stars)==1 |
74 |
|
|
y=repmat(str2num(str(stars+1:end)),[str2num(str(1:stars-1)) 1]); |
75 |
|
|
else |
76 |
|
|
warning('The format n*x1,m*x2, ... cannot be handled') |
77 |
|
|
% $$$ for k=1:length(stars) |
78 |
|
|
% $$$ % find the beginnin and termination of the set |
79 |
|
|
% $$$ end |
80 |
|
|
end |
81 |
|
|
end |
82 |
|
|
|
83 |
|
|
return |
84 |
|
|
|
85 |
|
|
function [ind] = mystrfind(str,pattern) |
86 |
|
|
|
87 |
|
|
if length(pattern) > length(str) |
88 |
|
|
ind = []; |
89 |
|
|
return |
90 |
|
|
else |
91 |
|
|
ind = findstr(str,pattern); |
92 |
|
|
end |