Clear Filters
Clear Filters

readtable and strcmp returning 0 all the time

5 views (last 30 days)
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

Accepted Answer

Walter Roberson
Walter Roberson on 17 Nov 2016
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 Comments
Walter Roberson
Walter Roberson on 17 Nov 2016
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 on 18 Nov 2016
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.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!