MATLAB Answers

How to write cell array into a csv file

1,561 views (last 30 days)
Hello Everyone, I have a cell array C where the first row is string and the remaining rows contain numbers. How do I write the variable C into a CSV file?
For example,
c = {'abc' 'def' 'ghk';[23],[24],[67];[87],[13],[999];[656],[6767],[546]};
Thanks

Accepted Answer

Cedric Wannaz
Cedric Wannaz on 5 Apr 2013
Edited: MathWorks Support Team on 27 Nov 2018
To write the data in C to a CSV file. Use “writetable” in combination with the “cell2table” function.
% Convert cell to a table and use first row as variable names
T = cell2table(c(2:end,:),'VariableNames',c(1,:))
% Write the table to a CSV file
writetable(T,'myDataFile.csv')
For more information see:
  5 Comments
Bidisha Das
Bidisha Das on 29 Aug 2018
What if I want the csv file in append mode?

Sign in to comment.

More Answers (8)

Jon
Jon on 5 Apr 2013
You could do it as follows with fprintf
c = {'abc' 'def' 'ghk';[23],[24],[67];[87],[13],[999];[656],[6767],[546]};
fid = fopen('junk.csv','w')
fprintf(fid,'%s, %s, %s\n',c{1,:})
fprintf(fid,'%f, %f, %f\n',c{2:end,:})
fclose(fid)
  6 Comments
Harsha Vardhana Padullaparti
Jonathan, Perfect! Thanks so much for your input.

Sign in to comment.


Azzi Abdelmalek
Azzi Abdelmalek on 5 Apr 2013
Edited: Azzi Abdelmalek on 5 Apr 2013
use csvwrite functionn
  2 Comments
Youcef Yahiaoui
Youcef Yahiaoui on 19 Sep 2015
Azzi,good to see your comments here. I usually use fprintf(fid...) for the first header lines then use csvwrite with the option -append...

Sign in to comment.



Zumbo_123
Zumbo_123 on 7 Jan 2016
Alternatively, you could use the method developed by Sylvain Fiedler. Below is the link to the file. It works with empty cells, numeric, char, string and logical cells. One array can contain all of them, but only one value per cell.

Peter Farkas
Peter Farkas on 9 Oct 2017
Convert to table and use writetable function T = cell2table(c(2:end, :)); T.Properties.VariableNames = c(1:end, :); writetable(T, res.csv);

Aaron Thrasher
Aaron Thrasher on 20 Apr 2018

I came to this page looking for an answer and found that all solutions were very slow for large arrays that include numeric and char based cell arrays of non-standard combinations. Instead, I created my own based off of previous comments and other research. I hope this helps someone as it has helped me reduce the time significantly.

function cellWrite(filename,origCell)
% save a new version of the cell for reference
modCell = origCell;
% assume some cells are numeric, in which case set to char
iNum = cellfun(@isnumeric,origCell);
%% Method 1 using indexing and straight conversion = 7 sec
tic
modCell(iNum) = cellstr(num2str([origCell{iNum}]'));
% toc
%% Method 2 using arrayfun = 25 sec
% tic
% modCell(iNum) = arrayfun(@num2str,[origCell{iNum}],'unif',0);
% toc
% tic
[rNum,cNum] = size(origCell);
frmt = repmat([repmat('%s,',1,cNum-1),'%s\n'],1,rNum);
fid = fopen(filename,'w');
fprintf(fid,frmt,modCell{:});
fclose(fid);
toc
end
  2 Comments

Sign in to comment.


Yoram Segal
Yoram Segal on 27 Aug 2018
convert the cell to a table and save the table as CSV
TT = array2table(C,'VariableNames',{'abc' 'def' 'ghk'});
writetable(TT,filename);
To read it back you can use TT = readtable(filename)

TripleSSSS
TripleSSSS on 4 Apr 2019
Matlab now support write from cell array to file
please check: writecell

Community Treasure Hunt

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

Start Hunting!