将单元格数组输出到CSV文件(MATLAB)

将单元格数组输出到CSV文件(MATLAB),matlab,file-io,csv,cell-array,Matlab,File Io,Csv,Cell Array,我使用cell(m,n)创建了一个mxn单元格数组,并用任意字符串填充每个单元格 如何将单元格数组输出为CSV文件,其中数组中的每个单元格都是CSV“电子表格”中的一个单元格 我尝试过使用cell2CSV,但我遇到了错误 Error in ==> cell2csv at 71 fprintf(datei, '%s', var); 原因: Error using ==> dlmwrite at 114 The input cell array cannot be conver

我使用
cell(m,n)
创建了一个mxn单元格数组,并用任意字符串填充每个单元格

如何将单元格数组输出为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.

任何指导都会很受欢迎:)

很容易编写自己的csv编写器

--编辑以反映评论--


下面是一个有点矢量化的解决方案:

%# 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

最后一个命令是用“纯”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

试试这个简单的cell2csv func谢谢你的回复,效果很好。我发现我的问题是我原来的单元格数组,我发现单元格数组中的每个单元格实际上都是一个包含1个字符串的单元格数组(…我真是个傻瓜!)难怪当我给它传递一个不可靠的数组时fprintf发了火!我可以看到你想做什么,但我认为
sprintf
应该是
fprintf
。再次感谢上帝!
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