Won't convert NaNs in cell array to zeros

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

Edited to format the code
what is the question?
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

You should use isnan to test whether a number is NaN or not.

2 Comments

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.
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!