📄 parse_parameter_list.m
字号:
% PARSE_PARAMETER_LIST Read/convert/return argument lists in various formats.%% Make a parameter structure of a parameter list:% st=parse_parameter_list({'parameter1','value1','parameter2','value2'....})%% Make a parameter structure of a parameter list:% st=parse_parameter_list({'parameter1=value1','parameter2=value2'....})%% Separate parameters of parameter list to second structure:% [st,st2]=parse_parameter_list({'parameter1','value1','parameter2','value2'....},'seppar1',.... )%% Separate parameters of parameter structure to second structure:% [st,st2]=parse_parameter_list(st,'seppar1',.... )%% Make a parameter list of a parameter structure:% lst=parse_parameter_list('cell',st)%% Convert strings to numbers in struct if possible:% lst=parse_parameter_list('str2num',st)%%%% 2002-11-06 Peter Rydes鋞er%function [st,st2,optexist]=parse_parameter_list(varargin) st2=struct([]); exist=[]; if ischar(varargin{1}) mode=varargin{1}; indata=varargin{2}; varargin=varargin(3:end); else mode=''; indata=varargin{1}; varargin=varargin(2:end); end if ischar(indata) lst={}; indata=local_trim(indata); while length(indata), [arg,indata]=strtok(indata); lst{end+1}=local_trim(arg); indata=local_trim(indata); end indata=lst; end if isstruct(indata), st=indata; elseif iscell(indata), lst={}; for arg=indata, arg=arg{1}; if isnumeric(arg), arg=num2str(arg); end idx=find(arg=='='); if isempty(idx), lst{end+1}=arg; else lst{end+1}=arg(1:idx(1)-1); lst{end+1}=arg(idx(1)+1:end); end end st=struct(lst{:}); end for arg=varargin, arg=arg{1}; if isfield(st,arg), eval( ['st2(1).' arg '=getfield(st,arg);'] ); st=rmfield(st,arg); eval( ['optexist(1).' arg '=1;'] ); else eval( ['optexist(1).' arg '=0;'] ); end end switch mode case {'struct' ''} %Just pass out as is case 'cell' lst=cell(1,length(fieldnames(st))*2); lst(1:2:end)=fieldnames(st); lst(2:2:end)=struct2cell(st); st=lst; case 'str2num' st=strfields2num(st); case 'num2str' st=strfields2num(st); case 'jasper' if length(fieldnames(st))==0; st=''; else st=numfields2str(st); st=parse_parameter_list('cell',st); st=sprintf(' -O %s=%s ',st{:}); end end return function st=strfields2num(st) for fld=fieldnames(st)', value=getfield(st,fld{1}); if ischar(value) & length(str2num(value)), st=setfield(st,fld{1},str2num(value)); end end return; function st=numfields2str(st) for fld=fieldnames(st)', value=getfield(st,fld{1}); if isnumeric(value), st=setfield(st,fld{1},num2str(value,'%.20g')); end end return;function str=local_trim(str) str=deblank(str(end:-1:1)); str=deblank(str(end:-1:1)); return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -