readtable and strcmp returning 0 all the time

3 次查看(过去 30 天)
I am comparing a string that is in my excel csv file that I read in matlab using readtable because it has numbers and strings with special characters in it.
I set my string: Str = 'var'
keep in mind in readtable in the excel sheet there's no ' ' around the string but readtable inserts it.
now I am trying to compare my string to what's in readtable an it keeps returning 0 when it should be 1.
The data in the table always display the header, may that be the reason why it never matches the string? How can I fix it?
fid = readtable('filename')
C = zeros(1,size(fid,1));
Str = 'var';
for k = 1: 10
tf=strcmp(fid(k,28), Str ) ;
if tf == 1
C(k) = Yes;
else
C(k) = No;
end
end

采纳的回答

Walter Roberson
Walter Roberson 2016-11-17
The basic problem that you are having is that fid(k,28) is a table not the contents stored at that location. You need fid{k,28} to get the contents.
A shorter version of your code would be to remove the for loop and
vals = [No, Yes];
C(1:10) = vals( 1 + strcmp(fid{1:10,28}, Str) );
If No is 0 and Yes is 1 then
C(1:10) = strcmp(fid{1:10,28}, Str);
  3 个评论
Walter Roberson
Walter Roberson 2016-11-17
Those are two different ways. The second single-line version is appropriate only in the case where No == 0 and Yes == 1.
Peter Perkins
Peter Perkins 2016-11-18
Without meaning to muddy the waters, if you're only accessing one variable in the table at a time, you might find that
fid.Var28(1:10)
is more readable than
fid{1:10,28}
Some people prefer the dot to the braces. In any case, one of the benefits of tables is that you can use a meeaningful name, rather than a number like 28. So even
fid{k,'Var28'}
might be preferable. Of course, "Var28' probably isn't the name that readtable will create from the file, you would use whatever that is.

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

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

Start Hunting!

Translated by