2011-07-19 196 views
3

我使用cell(m,n)創建了一個m×n單元格數組,並用任意字符串填充每個單元格。將單元格數組輸出到CSV文件(MATLAB)

如何將單元格數組作爲CSV文件輸出,其中數組中的每個單元格都是CSV「電子表格」中的單元格。

我使用cell2CSV試過,但我得到的錯誤...

Error in ==> cell2csv at 71 
    fprintf(datei, '%s', var); 

產生的原因:

Error using ==> dlmwrite at 114 
The input cell array cannot be converted to a matrix. 

任何指導意見將被好評:)

+0

嘗試FUNC http://www.mathworks.com/matlabcentral/fileexchange/7601-cell2csv/content/cell2csv.m –

回答

5

這裏是一個略微矢量化的解決方案:

%# lets create a cellarray filled with random strings 
C = cell(10,5); 
chars = char(97:122); 
for i=1:numel(C) 
    C{i} = chars(ceil(numel(chars).*rand(1,randi(10)))); 
end 

%# build cellarray of lines, values are comma-separated 
[m n] = size(C); 
CC = cell(m,n+n-1); 
CC(:,1:2:end) = C; 
CC(:,2:2:end,:) = {','}; 
CC = arrayfun(@(i) [CC{i,:}], 1:m, 'UniformOutput',false)';  %' 

%# write lines to file 
fid = fopen('output.csv','wt'); 
fprintf(fid, '%s\n',CC{:}); 
fclose(fid); 

的字符串:

C = 
    'rdkhshx'  'egxpnpvnfl' 'qnwcxcndo' 'gubkafae'  'yvsejeaisq' 
    'kmsvpoils'  'zqssj'   't'   'ge'   'lhntto'  
    'sarlldvig'  'oeoslv'  'xznhcnptc' 'px'   'qdnjcdfr' 
    'jook'   'jlkutlsy'  'neyplyr'  'fmjngbleay' 'sganh'  
    'nrys'   'sckplbfv'  'vnorj'  'ztars'   'xkarvzblpr' 
    'vdbce'   'w'    'pwk'   'ofufjxw'  'qsjpdbzh' 
    'haoc'   'r'    'lh'   'ipxxp'   'zefiyk'  
    'qw'   'fodrpb'  'vkkjd'  'wlxa'   'dkj'  
    'ozonilmbxb' 'd'    'clg'   'seieik'  'lc'   
    'vkpvx'   'l'    'ldm'   'bohgge'  'aouglob' 

產生的CSV文件:

rdkhshx,egxpnpvnfl,qnwcxcndo,gubkafae,yvsejeaisq 
kmsvpoils,zqssj,t,ge,lhntto 
sarlldvig,oeoslv,xznhcnptc,px,qdnjcdfr 
jook,jlkutlsy,neyplyr,fmjngbleay,sganh 
nrys,sckplbfv,vnorj,ztars,xkarvzblpr 
vdbce,w,pwk,ofufjxw,qsjpdbzh 
haoc,r,lh,ipxxp,zefiyk 
qw,fodrpb,vkkjd,wlxa,dkj 
ozonilmbxb,d,clg,seieik,lc 
vkpvx,l,ldm,bohgge,aouglob 
+0

感謝您的回覆,這很好。我發現我的問題是我的原始單元格數組,我在單元格數組中的每個單元格,實際上是一個單元格數組本身,它包含1個字符串(...我是個傻瓜!)難怪fprintf在我傳遞它時有適合一個狡猾的數組! –

0

足以輕鬆寫你自己的CSV作家。

- 編輯,以反映的意見 -

fid = fopen('myfilename.csv','w'); 
for i = 1:size(A,1) 
    for j = 1:size(A,2) 
     fprintf(fid,'%s',A{i,j}); 
     if(j!=size(A,2) 
     fprintf(fid,',',A{i,j}) 
     else 
     fprintf(fid,'\n') 
     end 
    end 
end 
fclose(fid); 
+0

這個簡單cell2csv我可以看到你正在嘗試做的,但我認爲'的sprintf '應該是'fprintf'。再次感謝BlessedKey! –

+0

沒問題。很高興你找到了解決方案。 – BlessedKey

1

最後一次提交是用「純粹」C編寫的。所以它在Matlab中不起作用。

這裏是正確的解決方案。

function [ ] = writecellmatrixtocsvfile(filename, matrix) 
%WRITECELLMATRIXTOCSVFILE Summary of this function goes here 
% Detailed explanation goes here 
fid = fopen(filename,'w'); 
for i = 1:size(matrix,1) 
    for j = 1:size(matrix,2) 
     fprintf(fid,'%s',matrix{i,j}); 
     if j~=size(matrix,2) 
      fprintf(fid,'%s',','); 
     else 
      fprintf(fid,'\n'); 
     end 
    end 
end 
fclose(fid); 
end