使用dlmwrite编写单元格对象MATLAB

时间:2012-03-20 21:33:05

标签: file matlab cells

我有一个包含7列的单元格数组。所有这些列都包含字符串。我想将此单元格数组写入文本文件。首先,我只在单元格的1个元素上执行此操作,这是我的代码:

 dlmwrite('735.txt',cell{1},'delimiter','%s\t');

cell{1}看起来像这样:

Columns 1 through 2

[1x30 char]    [1x20 char]

Column 3

'Acaryochloris'

Column 4

'Cyanobacteria001'

Columns 5 through 6

'Cyanobacteria00'    'Cyanobacteria'

Column 7

'Bacteria'

它在不分离列的情况下为我提供了输出。示例输出是:          Acaryochloris_marina_MBIC11017AcaryochlorismarinaAcaryochlorisCyanobacteria001Cyanobacteria00CyanobacteriaBacteria

正确的输出应该在所有列之间有空格:

Acaryochloris_marina_MBIC11017 Acaryochloris_marina Acaryochloris Cyanobacteria001 Cyanobacteria00 Cyanobacteria Bacteria

请注意,对于第二列,我们需要在Acaryochlorismarina之间添加下划线。这两个词之间原本有一个空格。

我希望我能正确解释问题,谢谢你的帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

DLMWRITE用于数字数据。在您的情况下,它将char数据处理为数字,每个字符作为时间。您可能以不会看到制表符分隔符的方式查看结果文件。

您可以使用XLSWRITE将单元字符串数组写入文件。如果您不希望输出为Excel格式,请先运行DLMWRITE,将一些数字写入文件。

dlmwrite(filename,1)
xlswrite(filename, Acell{1})

不要叫你变量单元格,这是MATLAB中的一个关键字。

作为替代方案,您可以写入具有较低级别功能的文件,例如FPRINTF。

<强>更新

如果要在for循环中使用XLSWRITE而不覆盖数据,可以指定要从中开始的行:

dlmwrite(filename,1)
for k = 1:10
    xlswrite( filename, Acell{k}, 1, sprintf('A%d',k) )
end

更新2

不幸的是,它在最新的MATLAB版本中不再起作用(我相信从R2012b开始)。 XLSWRITE提供有关错误文件类型的错误。

答案 1 :(得分:1)

以下内容应该符合您的要求:

fid = fopen('735.txt', 'w');
fprintf(fid, '%s\t', cell{1}{:});
fclose(fid);