2011-12-19 73 views
4

我有一个单元格数组,需要根据特定的格式打印在.txt文件中。我已经尝试了一些在线帮助(包括MATLAB中心dlmcell但即使不给我想要的答案分隔符是\ t在Matlab中打印单元格数组为.txt

cellarray = { ... 
     'AAPL' '2/20/2011' 100.5 
     'MSFT' '2/15/2011' 43.4551 
      } ; 

输出应该与以下格式的文本文件。: (使用标签分隔符)

"AAPL" "2/20/2011" 100.5 
"MSFT" "2/15/2011" 43.4551 

细胞将有8000行的最低和最高的15000号行会有空列。经过矢量化解决方案成为可能?难道感谢您的帮助。

回答

7

下面会为你的工作,例如:

C = cellarray.'; 
fid = fopen('file.dlm', 'wt'); 
fprintf(fid, '"%s"\t"%s"\t%g\n', C{:}); 
fclose(fid); 

MATLAB重用格式化字符串,直到它运行的输入。原则上,你可以先构造格式化字符串:

fstr = ''; 
for ic = 1:size(cellarray,2) 
    switch class(cellarray{1,ic}) 
     case 'char' 
      fstr = [fstr '"%s"']; 
     otherwise 
      % Assume numeric 
      fstr = [fstr '%g']; 
    end 
    if ic < size(cellarray,2), fstr = [fstr '\t']; else fstr = [fstr '\n']; end 
end 

然后

C = cellarray.'; 
fid = fopen('file.dlm', 'wt'); 
fprintf(fid, fstr, C{:}); 
fclose(fid); 
+0

谢谢。但是两种解决方案都给出相同的错误 - > 错误1 ???来自非单元格数组对象的单元格内容引用。 错误==> fprintf(fid,'“%s”\ t“%s”\ t%g \ n',C {:}); 错误2 – Maddy 2011-12-19 19:54:55

+0

开关类(cellarray {1,ic}) – Maddy 2011-12-19 19:58:46

+1

这意味着'cellarray'不是单元阵列。 – Nzbuu 2011-12-19 20:59:57

3

我常使用DLMWRITE和XLS的组合写。 DLMWRITE用于创建文本文件,因此XLSWRITE不会生成Excel格式的文件,但会将其保留为文本。

filename = 'file.txt'; 
dlmwrite(filename, 1) 
xlswrite(filename, cellarray) 

注意,在OS其中COM不可用(如Linux)XLSWRITE写入文本,所以你不需要调用DLMWRITE。


UPDATE

此方法不会再和MATLAB(因为可能R2012b)的最新版本。 xlswrite总是写入Excel格式的文件。

但是,由于R2013b MATLAB引入了TABLESWRITETABLE函数,如果单元格数组可以转换为表格(检查CELL2TABLE函数),它的工作效果很好。

+0

感谢育。它可以正常工作,但需要18秒才能打印出15k行的3列。我希望有一个更快的选择。我甚至不确定现在是否可能.. – Maddy 2011-12-19 20:02:52

+0

'xlswrite'非常慢,因为它需要首先启动并连接到Excel。但是这可能需要几秒钟的时间。 – Nzbuu 2011-12-19 21:00:58

+0

这是一个很好的方式来编写输出,而不会经历混乱的loosps ...谢谢 – RnD 2012-02-10 04:57:09