readtable and strcmp returning 0 all the time
5 次查看(过去 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
0 个评论
采纳的回答
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
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
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 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Text Files 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!