time | Calls | line |
---|
| | 75 | function [variables,metadata,omitVars] = handleReplacement(variables,metadata,varOpts,importErrorRule,missingRule,errorIDs,missingIDs)
|
| | 76 |
|
| | 77 | % Used for handling replacement rules
|
< 0.001 | 2 | 78 | cols = length(variables);
|
< 0.001 | 2 | 79 | rows = size(errorIDs,1);
|
< 0.001 | 2 | 80 | omitVars = false(1,cols);
|
< 0.001 | 2 | 81 | omitRecords = false(rows,1);
|
| | 82 |
|
| | 83 | function processRules(ids,rule,errFcn)
|
| | 84 | switch(rule)
|
| | 85 | case 'error'
|
| | 86 | rowK = find(any(ids,2),1);
|
| | 87 | colK = find(ids(rowK,:),1);
|
| | 88 | errFcn(varOpts{colK}.Type,rowK,colK);
|
| | 89 | case 'fill'
|
| | 90 | % Replace fill value
|
| | 91 | for k = 1:numel(variables)
|
| | 92 | % Replace fill value
|
| | 93 | fill = varOpts{k}.FillValue;
|
| | 94 | [fill,variables{k}] = matlab.io.internal.processRawFill(fill,variables{k});
|
| | 95 | if ~all(ids(:,k) == 0)
|
| | 96 | variables{k}(ids(:,k)) = fill;
|
| | 97 | end
|
| | 98 | end
|
| | 99 | case 'omitvar'
|
| | 100 | % set the selected variable ID to zero so it can be filtered later.
|
| | 101 | omitVars(:,any(ids,1)) = true;
|
| | 102 | case 'omitrow'
|
| | 103 | % Collect record numbers which need to be omitted
|
| | 104 | omitRecords(any(ids,2),:) = true;
|
| | 105 | end
|
| | 106 | end
|
| | 107 |
|
| | 108 | % Handle any error
|
| | 109 |
|
< 0.001 | 2 | 110 | if any(errorIDs(:))
|
| | 111 | processRules(errorIDs,importErrorRule,@(type,rowNum,colNum)errorRuleError(colNum,rowNum,type));
|
< 0.001 | 2 | 112 | end
|
| | 113 |
|
< 0.001 | 2 | 114 | if any(missingIDs(:))
|
0.005 | 1 | 115 | processRules(missingIDs,missingRule,@(~,rowNum,colNum)missingRuleError(colNum,rowNum));
|
< 0.001 | 2 | 116 | end
|
| | 117 |
|
| | 118 | % Remove omitted variables
|
< 0.001 | 2 | 119 | if any(omitVars)
|
| | 120 | variables(:,omitVars) = [];
|
| | 121 | metadata.VariableNames(omitVars(1:numel(metadata.VariableNames))) = [];
|
< 0.001 | 2 | 122 | end
|
| | 123 |
|
| | 124 | % handle omit-records
|
< 0.001 | 2 | 125 | if any(omitRecords)
|
| | 126 | for i = 1:numel(variables)
|
| | 127 | variables{i}(omitRecords) = [];
|
| | 128 | end
|
| | 129 | metadata.RowNames(omitRecords(1:numel(metadata.RowNames))) = [];
|
< 0.001 | 2 | 130 | end
|
< 0.001 | 2 | 131 | end
|
Other subfunctions in this file are not included in this listing.