Check elements in cell

49 次查看(过去 30 天)
Palumbo Piero
Palumbo Piero 2017-11-22
评论: Drewsky3 2019-9-26
Hello, I have this cell:
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] 'Del Col_2010' [] [] [] [] 'Lee&Mudawar_2005'
and I have written this code:
for z=1:length (NAME_T)
if isequal(NAME_T,'Del Col_2010')
disp ('YES')
else
disp ('NO')
end
end
But the answer is always NO. What can i do? THanks in advance.

采纳的回答

KL
KL 2017-11-22
编辑:KL 2017-11-22
No need for a loop, just use find and strcmp,
indx= find(strcmp(NAME_T, 'Del Col_2010'))

更多回答(1 个)

dpb
dpb 2017-11-22
The line if isequal(NAME_T,'Del Col_2010') inside the loop doesn't help because you don't index the cell array; NAME_T returns the full cell array, not individual elements within; you were looking for NAME_T(z) to look at individual cells although there the regular parentheses return the cell, not the content of the cell; that would be done via "the curlies" as if NAME_T{z}.
for z=1:length (NAME_T)
if isequal(NAME_T{z},'Del Col_2010')
disp ('YES')
else
disp ('NO')
end
end
The string functions aren't as flexible as could be when all the cell array content is character; you have to use some roundabout ways to do the search with vectorized Matlab functions--
>> c={[] [] [] 'Del Col_2010' }; % a short example of case for demonstration
>> strfind(c,'Del Col_2010')
Error using cell/strfind (line 32)
If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array.
>> regexp(c,'Del Col_2010') % and another...
Error using regexp
All cells must be strings.
>>
Well, pooh! What can we do????
>> cellfun(@(c) strfind(c,'Del Col_2010'),c,'uniform',0) % cellfun is essentially the loop
ans =
[] [] [] [1]
>> cellfun(@isempty,ans) % this what we want except opposite sense; the location is false
ans =
1 1 1 0
>> cellfun(@(c) strfind(c,'Del Col_2010'),c,'uniform',0) % repeat
ans =
[] [] [] [1]
>> find(~cellfun(@isempty,ans)) % look for logical FALSE instead of TRUE...
ans =
4
>>
That's the element we wanted...so to put it all together,
>> find(~cellfun(@isempty,cellfun(@(c) strfind(c,'Del Col_2010'),c,'uniform',0)))
ans =
4
>>
Aha!!! That's the cell location trying to find. To make this more useful, create a dynamic function handle the embeds the desired string in it and then use that function in the inner call rather than the explicit string as shown above.
There really should be a simpler syntax and perhaps there is but I've never found it...
  1 个评论
Drewsky3
Drewsky3 2019-9-26
Hi, I have a very similar problem but am getting mixed up with cells, characters, etc. I have a cell arry t_stamp where the contents are strings of date-time.
I want to find a specific date-time and know what row that is in, to use it as the starting point of a for loop.
Eg:
t_stamp=
'2019-09-18 10:12:59 AM'
'2019-09-18 10:13:00 AM'
'2019-09-18 10:13:01 AM'
then I want to find the row that '2019-09-18 10:13:01 AM' is in:
index=strfind(t_stamp, '2019-09-18 10:13:11 AM')
This gives a cell arry as:
index =
[]
[]
1
how do i then define the row of 1 as istart?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by