|
51 | 51 | obj = input;
|
52 | 52 | elseif (regexp(pathname, '$\d+'))
|
53 | 53 | obj = input(str2double(pathname(2:end)) + 1);
|
54 |
| -elseif (regexp(pathname, '^\[[0-9:]+\]$')) |
| 54 | +elseif (~isempty(regexp(pathname, '^\[[0-9:]+\]$', 'once')) || iscell(input)) |
55 | 55 | arraystr = pathname(2:end - 1);
|
56 | 56 | if (find(arraystr == ':'))
|
57 | 57 | [arraystr, arrayrange] = regexp(arraystr, '(\d*):(\d*)', 'match', 'tokens');
|
|
66 | 66 | else
|
67 | 67 | arrayrange{2} = length(input);
|
68 | 68 | end
|
69 |
| - else |
| 69 | + elseif (regexp(arraystr, '^[0-9:]+', 'once')) |
70 | 70 | arrayrange = str2double(arraystr) + 1;
|
71 | 71 | arrayrange = {arrayrange, arrayrange};
|
72 | 72 | end
|
| 73 | + if (~exist('arrayrange', 'var')) |
| 74 | + arrayrange = {1, length(input)}; |
| 75 | + end |
73 | 76 | if (iscell(input))
|
74 | 77 | obj = {input{arrayrange{1}:arrayrange{2}}};
|
| 78 | + if (deepscan) |
| 79 | + searchkey = ['..' pathname]; |
| 80 | + [val, isfound] = getonelevel(obj, [paths{1:pathid} {searchkey}], pathid + 1); |
| 81 | + if (isfound) |
| 82 | + if (~exist('newobj', 'var')) |
| 83 | + newobj = {}; |
| 84 | + end |
| 85 | + newobj = [newobj(:)', {val}]; |
| 86 | + end |
| 87 | + if (exist('newobj', 'var')) |
| 88 | + obj = newobj; |
| 89 | + end |
| 90 | + end |
| 91 | + if (exist('obj', 'var') && iscell(obj) && length(obj) == 1) |
| 92 | + obj = obj{1}; |
| 93 | + end |
75 | 94 | else
|
76 | 95 | obj = input(arrayrange{1}:arrayrange{2});
|
77 | 96 | end
|
|
83 | 102 | end
|
84 | 103 | items = fieldnames(input);
|
85 | 104 | for idx = 1:length(items)
|
86 |
| - [val, isfound] = getonelevel(input.(items{idx}), [paths{:} {['..' pathname]}], pathid + 1); |
| 105 | + [val, isfound] = getonelevel(input.(items{idx}), [paths{1:pathid - 1} {['..' pathname]}], pathid); |
87 | 106 | if (isfound)
|
88 | 107 | if (~exist('obj', 'var'))
|
89 | 108 | obj = {};
|
90 | 109 | end
|
91 |
| - obj = [obj{:}, val]; |
| 110 | + obj = [obj{:}, {val}]; |
92 | 111 | end
|
93 | 112 | end
|
| 113 | + if (exist('obj', 'var') && length(obj) == 1) |
| 114 | + obj = obj{1}; |
| 115 | + end |
94 | 116 | else
|
95 |
| - obj = input.(stpath); |
| 117 | + if (isfield(input, stpath)) |
| 118 | + obj = input.(stpath); |
| 119 | + end |
96 | 120 | end
|
97 | 121 | elseif (isa(input, 'containers.Map'))
|
98 | 122 | if (deepscan)
|
|
0 commit comments