How to write cell array into a csv file

조회 수: 823 (최근 30일)
Jalaj Bidwai
Jalaj Bidwai . 2013년 4월 5일
답변: Vibhav Gaur . 2021년 6월 21일
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

채택된 답변

Cedric Wannaz
Cedric Wannaz 2013년 4월 5일
편집: MathWorks Support Team 님. 2018년 11월 27일
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
Bidisha Das
Bidisha Das 2018년 8월 29일
What if I want the csv file in append mode?

댓글을 달려면 로그인하십시오.

추가 답변 (8개)

Jon
Jon 2013년 4월 5일
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
Harsha Vardhana Padullaparti
Harsha Vardhana Padullaparti 2016년 6월 16일
Jonathan, Perfect! Thanks so much for your input.

댓글을 달려면 로그인하십시오.


Vibhav Gaur
Vibhav Gaur 2021년 6월 21일
writecell(c, 'c.csv')

Azzi Abdelmalek
Azzi Abdelmalek 2013년 4월 5일
편집: Azzi Abdelmalek 님. 2013년 4월 5일
use csvwrite functionn
  댓글 수: 2
Youcef Yahiaoui
Youcef Yahiaoui 2015년 9월 19일
Azzi,good to see your comments here. I usually use fprintf(fid...) for the first header lines then use csvwrite with the option -append...

댓글을 달려면 로그인하십시오.


Zumbo_123
Zumbo_123 2016년 1월 7일
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 2017년 10월 9일
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 2018년 4월 20일

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
Michael Barrow
Michael Barrow 2019년 10월 19일
Thanks for sharing your work!

댓글을 달려면 로그인하십시오.


Yoram Segal
Yoram Segal 2018년 8월 27일
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 2019년 4월 4일
Matlab now support write from cell array to file
please check: writecell

카테고리

Help CenterFile Exchange에서 Tables에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by