在Matlab中将单元格数组打印为.txt

时间:2011-12-19 18:20:10

标签: matlab text-files printf

我有一个需要根据特定格式打印在.txt文件中的单元格数组。我尝试了一些在线帮助(包括matlab central dlmcell,但即使这样也没有给我想要的答案。分隔符是\ t。

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

输出应该是.txt文件,格式如下:(使用制表符分隔符)

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

单元格最少有8000行,最多15000行。没有行会有空列。矢量化解决方案是否可行?应该感谢你的帮助。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

我经常使用DLMWRITE和XLSWRITE的组合。 DLMWRITE用于制作文本文件,因此XLSWRITE不会以Excel格式生成文件,而是将其保留为文本。

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

请注意,在没有COM的操作系统上(如Linux),XLSWRITE会写入文本,因此您无需调用DLMWRITE。


<强>更新

此方法不再适用于最新版本的MATLAB(因为可能是R2012b)。 xlswrite始终写入Excel格式的文件。

但是,由于R2013b MATLAB引入了TABLES,如果单元格数组可以转换为表格,那么WRITETABLE函数效果很好(检查CELL2TABLE函数)。