2011-07-19 56 views
3

cell(m,n)を使用してm x nのセル配列を作成し、各セルに任意の文字列を入力しました。セル配列をCSVファイル(MATLAB)に出力

セルアレイをCSVファイルとして出力するにはどうすればいいですか。アレイ内の各セルはCSV 'スプレッドシート'のセルです。十分に

どれ指導がうまく受信されます
Error using ==> dlmwrite at 114 
The input cell array cannot be converted to a matrix. 

:)

+0

私はあなたがやろうとしているかを見ることができます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

簡単:

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

によって引き起こさ

私はcell2CSVを使用してみましたが、私はエラーを取得...あなた自身の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

FUNCこのシンプルな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 
関連する問題