[5] | 1 | %SETMETA add/update key-value pair(s) to a dataset |
---|
| 2 | % |
---|
| 3 | % B=SETMETA(A,KEYS,VALUES) |
---|
| 4 | % |
---|
| 5 | % INPUT |
---|
| 6 | % A input dataset with meta structure (see MAKEMETA) |
---|
| 7 | % KEYS string key or a cell-array with key names |
---|
| 8 | % VALUES key-specific values. If more keys are defined, VALUES |
---|
| 9 | % must be stored in a cell-array |
---|
| 10 | % |
---|
| 11 | % OUTPUT |
---|
| 12 | % B output dataset |
---|
| 13 | % |
---|
| 14 | % DESCRIPTION |
---|
| 15 | % This function sets the key-value pair(s) in a user field of a dataset. |
---|
| 16 | % |
---|
| 17 | % SEE ALSO |
---|
| 18 | % REMOVEMETA, GETMETA, SETMETA |
---|
| 19 | |
---|
| 20 | function a=setmeta(a,inkeys,invalues) |
---|
| 21 | |
---|
| 22 | isvalidmeta(a); |
---|
| 23 | |
---|
| 24 | u=a.user; |
---|
| 25 | |
---|
| 26 | if ischar(inkeys), inkeys={inkeys}; end |
---|
| 27 | if ~iscell(invalues), invalues={invalues}; end |
---|
| 28 | |
---|
| 29 | if ~iscell(inkeys) | ~iscell(invalues) |
---|
| 30 | error('unsupported format of keys or values') |
---|
| 31 | end |
---|
| 32 | if length(inkeys)~=length(invalues) |
---|
| 33 | error('keys and values to be set must have equal sizes'); |
---|
| 34 | end |
---|
| 35 | |
---|
| 36 | % update meta in user |
---|
| 37 | u=a.user; |
---|
| 38 | for j=1:length(inkeys) |
---|
| 39 | % is the key already defined? |
---|
| 40 | ind=strcmp(u.meta.keys,inkeys{j}); |
---|
| 41 | if any(ind) |
---|
| 42 | k=find(ind); |
---|
| 43 | u.meta.keys{k}=inkeys{j}; |
---|
| 44 | u.meta.values{k}=invalues{j}; |
---|
| 45 | else % not found, add a new key-value |
---|
| 46 | u.meta.keys{end+1}=inkeys{j}; |
---|
| 47 | u.meta.values{end+1}=invalues{j}; |
---|
| 48 | end |
---|
| 49 | end |
---|
| 50 | a.user=u; |
---|
| 51 | |
---|
| 52 | return |
---|