Finding number in a string
8 views (last 30 days)
Show older comments
Dear all and thanks for your help, I have a Cell array (D) in which each cell is composed of string and characters like AB878546HD. In anoter cell (C) I have a list of numbers and I want to find the location of each number in cell C in cell D.
I have tried to use the strfind function k = strfind(D,C{2}) but it didn’t work - I didnt get an errore but got ans=[] .
If instead of C{2} I write k = strfind(D,'38306') it works and the wanted cell was founded. So I dont know what is wrong Any help will be appreciated, here is example parts of C
' 36462' ' 38306' ' 3113' ' 1305' ' 22608' ' 11086' ' 7541'
and D
'jgi|Thaps3|40|fgenesh1_kg.C_chr_4000008'
'jgi|Thaps3|36462|fgenesh1_kg.C_chr_4000014'
'jgi|Thaps3|3113|fgenesh1_kg.C_chr_5000009'
'jgi|Thaps3|93|fgenesh1_kg.C_chr_8000006'
'jgi|Thaps3|105|fgenesh1_kg.C_chr_9000002'
'jgi|Thaps3|168|fgenesh1_pm.C_chr_1000013'
Shilo
5 Comments
Accepted Answer
Ken Atwell
on 8 Mar 2012
The following will create a numeric array, N, where the value of N(x) indicates which element of D contained the string C(x). If no match was found, N(x) is NaN. The text search includes the '|' delimiter to avoid cases like "93" matching not only "93", but also "930", "931", "193", "293", etc.
D= {'jgi|Thaps3|40|fgenesh1_kg.C_chr_4000008' ...
'jgi|Thaps3|36462|fgenesh1_kg.C_chr_4000014' ...
'jgi|Thaps3|3113|fgenesh1_kg.C_chr_5000009' ...
'jgi|Thaps3|93|fgenesh1_kg.C_chr_8000006' ...
'jgi|Thaps3|105|fgenesh1_kg.C_chr_9000002' ...
'jgi|Thaps3|168|fgenesh1_pm.C_chr_1000013' };
C = {' 36462' ' 38306' ' 3113' ' 1305' '22608' ' 11086' ' 7541'};
C = strtrim(C); % Trim whitespace from C
N = nan(size(C));
for i = 1:numel(C);
found = find(cellfun(@(x) ~isempty(x), strfind(D, ['|' C{i} '|'] )));
if ~isempty(found)
N(i) = found;
end
end
N
An exceptionally clever person might determine a way to do this without a for loop, but it would likely sacrifice readability.
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!