How to write cell array into a csv file
355 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuesta aceptada
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
Más respuestas (8)
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
Harsha Vardhana Padullaparti
el 16 de Jun. de 2016
Jonathan, Perfect! Thanks so much for your input.
Azzi Abdelmalek
el 5 de Abr. de 2013
Editada: Azzi Abdelmalek
el 5 de Abr. de 2013
2 comentarios
Jon
el 5 de Abr. de 2013
csvwrite only works on numeric arrays, not cell arrays with strings and numbers
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...
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.
0 comentarios
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);
0 comentarios
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
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.
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)
0 comentarios
Ver también
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!