How to write cell array into a csv file
515 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jalaj Bidwai
am 5 Apr. 2013
Beantwortet: Vibhav Gaur
am 21 Jun. 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
0 Kommentare
Akzeptierte Antwort
Cedric
am 5 Apr. 2013
Bearbeitet: MathWorks Support Team
am 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 Kommentare
Weitere Antworten (8)
Jon
am 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 Kommentare
Azzi Abdelmalek
am 5 Apr. 2013
Bearbeitet: Azzi Abdelmalek
am 5 Apr. 2013
2 Kommentare
Youcef Yahiaoui
am 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...
Zumbo_123
am 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 Kommentare
Peter Farkas
am 9 Okt. 2017
Convert to table and use writetable function T = cell2table(c(2:end, :)); T.Properties.VariableNames = c(1:end, :); writetable(T, res.csv);
0 Kommentare
Aaron Thrasher
am 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 Kommentare
Aaron Thrasher
am 20 Apr. 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.
Yoram Segal
am 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 Kommentare
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!