How to write cell array into a csv file
    82 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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 Commenti
Risposta accettata
  Cedric
      
      
 il 5 Apr 2013
        
      Modificato: MathWorks Support Team
    
 il 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 Commenti
Più risposte (8)
  Jon
      
 il 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 Commenti
  Azzi Abdelmalek
      
      
 il 5 Apr 2013
        
      Modificato: Azzi Abdelmalek
      
      
 il 5 Apr 2013
  
      2 Commenti
  Youcef Yahiaoui
 il 19 Set 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
 il 7 Gen 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 Commenti
  Peter Farkas
 il 9 Ott 2017
        Convert to table and use writetable function T = cell2table(c(2:end, :)); T.Properties.VariableNames = c(1:end, :); writetable(T, res.csv);
0 Commenti
  Aaron Thrasher
 il 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 Commenti
  Aaron Thrasher
 il 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
 il 27 Ago 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 Commenti
Vedere anche
Categorie
				Scopri di più su Text Data Preparation in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!