Is there a function for finding the specific column number in a cell array?

Helle everyone,
I think question is clear but, this is Matlab at all, I have a nx1 cell array and I want to know which column contains "WantedName" word. So firstly I have written a script to do this, but it takes so much time at debugging, because there are so many columns. I think there should be a function to do that like findcolumn(A, 'x'). my script that works fine for me;
names = fieldnames(EXC);
Snames = strfind(names, 'WantedName')
for k = 1:numel(Snames)
if Snames{k} == 1;
n = k
end
end
Fieldnames and 'WantedName'(s) are not corresponding word by word everytime, so I need to use strfind to find if 'WantedName' exists in a fieldname of EXC(struct). so strfind gives me cell array of names but place "1" for the column that have 'WantedName' in it. and then I need to do numel(names) times of for loop to find which column it is that having "1".
There should be a function to do that?? It is not the end of the world, script works well right now but I am curious.

 Akzeptierte Antwort

KSSV
KSSV am 18 Okt. 2017

1 Kommentar

Oh, thanks that's it!
I already tried isempty and cellfun but I never thought of using "not". sometimes the answer is really simple :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

[tf, idx] = ismember('WantedName', names);
Then, if tf is true then names{idx} is 'WantedName'.
You hint that you might have several wanted names. If so then
[tf, idx] = ismember(WantedNames, names);
where WantedNames is a cell array of strings to look for in names. tf(K) tells you if WantedNames{K} was found, and if it was found then idx(K) is the position in names.

3 Kommentare

Thank you for your answer Walter,
but it is not working, because ismember will return true answers if only I want to find "exact" 'WantedName'.
For example, I want to find the column that contains words; 'abcd', and it exists on a nth column named 'abcd_x' for instance. ismember would work with only ;
ismember('abcd_x', names)
tf = 1 , idx = n
--
ismember('abcd', names)
tf = 0, idx = 0
it would give these results, but I want to find this 'abcd_x' named, nth column with 'abcd' because I only have that, I don't have 'abcd_x'.
If you have R2016b or later,
tf = startsWith(names, WantedNames)
This will return a logical array the same size as names (assuming it is a string array or cell array of character vectors) that tells you which of the entries start with something (anything) in Wantednames (which can be a character vector or string array or cell array of character vectors.)
Unfortunately I use r2012b, but @KSSV's link worked just fine for me, thank you for your time Walter!

Melden Sie sich an, um zu kommentieren.

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by