image thumbnail
from strfind for datasets by Arnaud Amzallag
Search and find entries in a Matlab dataset (in a specified string variable)

ind=datasetStrFind(dset,str,vars)
function ind=datasetStrFind(dset,str,vars)
%
%
% function ind=datasetStrFind(dset,str,vars)
%
% like strfind.m but applies on datasets instead of cell arrays.
%
% The "dataset" type is a matlab type which allows to store data in a similar
% way than database tables. Database operations such as join can by applied 
% (see the function join). However I did not find a function to do a simple
% field search on a dataset.
%
% This function allows to look for a substring (str) within observations of 
% a variable (vars) of a dataset dset. vars can be the variable name or the
% column number to search in the dataset.
% 
% % % %
% 
% example:
% names = {'John'; 'Henri';'Enrico'};
% ages = [26; 18; 35];
% d1 = dataset({names, 'Name'}, {ages, 'Age'})
% 
% datasetStrFind(d1,'ri',1)
% 
% will return
% 
% d1 = 
% 
%     Name            Age
%     'John'          26 
%     'Henri'         18 
%     'Enrico'        35 
% 
% 
% ans =
% 
%      2
%      3


if length(vars(:))~=1 && ~ischar(vars)
    length(vars(:))
    error('vars must be a scalar (variable index) or a string (variable name)')   
end

if ~ischar(dset{1,vars})
    error(['the variable ',num2str(vars),' does not seem to contain strings'])
end

strfindann=@(x) strfind(x,str);
temp=datasetfun(strfindann,dset,'DataVars',vars,'UniformOutput',false);
ind=find(~cellfun('isempty',temp{1}));

Contact us at files@mathworks.com