MATLAB Answers

2

How to write cell array into a csv file

Asked by Jalaj Bidwai on 5 Apr 2013
Latest activity Answered by TripleSSSS on 4 Apr 2019
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

  0 Comments

Sign in to comment.

8 Answers

Answer by Cedric Wannaz
on 5 Apr 2013
Edited by MathWorks Support Team on 27 Nov 2018
 Accepted Answer

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

Thanks guys..for replying and giving the solution..Thankyou very much
Sara Khalifa's flag moved here:
Great Solution. Thanks!
What if I want the csv file in append mode?

Sign in to comment.


Answer by 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

I don't know if the OP will read your comment, but thank you for the information; I didn't know EXPORT.
Jonathan,Fanstastic. Both of the ways have worked for me..Thank you for the help..I really aprreciate it...
Jonathan, Perfect! Thanks so much for your input.

Sign in to comment.


Answer by Azzi Abdelmalek
on 5 Apr 2013
Edited by Azzi Abdelmalek
on 5 Apr 2013

use csvwrite functionn

  2 Comments

Jon
on 5 Apr 2013
csvwrite only works on numeric arrays, not cell arrays with strings and numbers
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.


Answer by 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.

  0 Comments

Sign in to comment.


Answer by 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);

  0 Comments

Sign in to comment.


Answer by 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

  1 Comment

Correction to the code - the cell needs to be transposed before writing because the data is written left to right vs. matlab reading cell top down.

Sign in to comment.


Answer by 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)

  0 Comments

Sign in to comment.


Answer by TripleSSSS on 4 Apr 2019

Matlab now support write from cell array to file
please check: writecell

  0 Comments

Sign in to comment.