0001 function [obj, cancelled] = vb_batch_mgr_create_concrete_parm(obj)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 if ~exist('obj', 'var')
0020 error('obj is a required parameter.');
0021 end
0022
0023
0024
0025
0026 cancelled = false;
0027
0028 [column, data] = vb_batch_variable_table_get_data(obj.table);
0029
0030
0031 Nparm = vb_batch_parm_set_get_num_of_parm(obj.template);
0032
0033
0034
0035 [column, table] = vb_batch_variable_table_get_data(obj.table);
0036 Nvariable = length(column);
0037 Nset = size(table, 1);
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 flag_empty = false;
0052 for k=1:Nset
0053 for j=1:Nvariable
0054 if isempty(table{k, j}), flag_empty = true; end
0055 end
0056 end
0057 if flag_empty
0058 res = questdlg(...
0059 'There are some empty cells in the table. Continue?', ...
0060 'Confirm', 'Yes', 'No', 'No');
0061 if strcmpi(res, 'no')
0062 cancelled = true;
0063 return;
0064 end
0065 end
0066
0067
0068 ix = strmatch('$ID$', column, 'exact');
0069 if isempty(ix)
0070 ids = cell(Nset, 1);
0071 else
0072 ids = table(:, ix);
0073 end
0074
0075 for k=1:length(ids)
0076 if isempty(ids{k}), ids{k} = ['ID' num2str(k)]; end
0077 end
0078
0079 obj.parm_set = cell(0);
0080 for k=1:Nset
0081
0082 parm_set = vb_batch_parm_set_new(ids{k});
0083
0084 for m=1:Nparm
0085
0086 [parm, parm_type] = vb_batch_mgr_get_parm(obj, 0, m);
0087
0088
0089 for n=1:Nvariable
0090 key = column{n};
0091 value = table{k, n};
0092 if isempty(value), value = ''; end
0093
0094 key = strrep(key, '$', '\$');
0095 value = strrep(value, '\', '\\');
0096 parm = inner_replace_key2value(parm, key, value);
0097 end
0098
0099 if isfield(parm, 'time_stamp')
0100 parm = rmfield(parm, 'time_stamp');
0101 end
0102 parm_set = vb_batch_parm_set_add_parm(parm_set, parm, parm_type);
0103 end
0104
0105
0106 obj.parm_set{k, 1} = parm_set;
0107 end
0108
0109
0110
0111
0112 if nargout < 1
0113 error('function caller should receive object.');
0114 end
0115
0116 function parm = inner_replace_key2value(parm, key, value)
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 fields = fieldnames(parm);
0127 Nfields = length(fields);
0128
0129 for k=1:Nfields
0130 field = parm.(fields{k});
0131 if iscellstr(field) || ischar(field)
0132 parm.(fields{k}) = regexprep(field, key, value);
0133 elseif isstruct(field)
0134 parm.(fields{k}) = inner_replace_key2value(field, key, value);
0135 end
0136 end