How to write cell array into a csv file

355 visualizaciones (últimos 30 días)
Jalaj Bidwai
Jalaj Bidwai el 5 de Abr. de 2013
Respondida: Vibhav Gaur el 21 de Jun. de 2021
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

Respuesta aceptada

Cedric
Cedric el 5 de Abr. de 2013
Editada: MathWorks Support Team el 27 de Nov. de 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 comentarios
Image Analyst
Image Analyst el 19 de Oct. de 2015
Sara Khalifa's flag moved here:
Great Solution. Thanks!
Bidisha Das
Bidisha Das el 29 de Ag. de 2018
What if I want the csv file in append mode?

Iniciar sesión para comentar.

Más respuestas (8)

Jon
Jon el 5 de Abr. de 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 comentarios
Jalaj Bidwai
Jalaj Bidwai el 8 de Abr. de 2013
Jonathan,Fanstastic. Both of the ways have worked for me..Thank you for the help..I really aprreciate it...
Harsha Vardhana Padullaparti
Harsha Vardhana Padullaparti el 16 de Jun. de 2016
Jonathan, Perfect! Thanks so much for your input.

Iniciar sesión para comentar.


Vibhav Gaur
Vibhav Gaur el 21 de Jun. de 2021
writecell(c, 'c.csv')

Azzi Abdelmalek
Azzi Abdelmalek el 5 de Abr. de 2013
Editada: Azzi Abdelmalek el 5 de Abr. de 2013
use csvwrite functionn
  2 comentarios
Jon
Jon el 5 de Abr. de 2013
csvwrite only works on numeric arrays, not cell arrays with strings and numbers
Youcef Yahiaoui
Youcef Yahiaoui el 19 de Sept. de 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...

Iniciar sesión para comentar.


Zumbo_123
Zumbo_123 el 7 de En. de 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 el 9 de Oct. de 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 el 20 de Abr. de 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 comentarios
Aaron Thrasher
Aaron Thrasher el 20 de Abr. de 2018
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.
Michael Barrow
Michael Barrow el 19 de Oct. de 2019
Thanks for sharing your work!

Iniciar sesión para comentar.


Yoram Segal
Yoram Segal el 27 de Ag. de 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 el 4 de Abr. de 2019
Matlab now support write from cell array to file
please check: writecell

Categorías

Más información sobre Cell Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by