Won't convert NaNs in cell array to zeros

1 view (last 30 days)
The function display all the spreadsheet information in the proper formatting, but it will not change the NaN cells to zeros.
function [data] = importxls(workbookfile)
[~,~,data_MRN] = xlsread(workbookfile);
[~,sheetnames] = xlsfinfo(workbookfile);
m = size(sheetnames,2);
data = cell(1,m);
for k = 4:m;
sheet = char(sheetnames(1,k));
[~,~,data{k}] = xlsread(workbookfile, sheet);
[r,c] = size(data{k});
fid = fopen('importxls.txt','a');
for i = 2:r
fprintf(fid, '%-10.11s',num2str(data_MRN{2,2}));
fprintf(fid, '%-10.11s',num2str(k-3));
fprintf(fid, '%-10.11s',num2str(0));
for j = 1:c
if strcmp('NaN',data{k}{i,j}) == 1
data{k}{i,j} = '0';
elseif iscellstr(data{k}{i,j}) == 1
data{k}{i,j} = char(data{k}{i,j});
elseif isa(data{k}{i,j},'char') == 0
data{k}{i,j} = num2str(data{k}{i,j});
end
fprintf(fid, '%-10.11s',data{k}{i,j});
end
fprintf(fid, '\n');
end
end
fclose(fid);
end
  3 Comments
Ryan
Ryan on 17 Oct 2012
when the xls is read, the empty cells are converted to NaN. The first if statement was written to convert these NaNs to '0' so it would be written in the txt file as a 0. The NaNs remain after the code is run, and I have no idea why.

Sign in to comment.

Accepted Answer

Honglei Chen
Honglei Chen on 16 Oct 2012
You should use isnan to test whether a number is NaN or not.
  2 Comments
Matt Fig
Matt Fig on 16 Oct 2012
Yes, NaN is not a string. So this line:
strcmp('NaN',data{k}{i,j})
Does not do what you want. Use:
isnan(data{k}{i,j})
Or better yet, drop the loop and use logical indexing.
Ryan
Ryan on 17 Oct 2012
Thanks for the help. I replaced the strcmp() with isnan(). I play around with indexing later.

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!