2

亲爱的stackoverflowers,

我想使用 matlab 创建一个 .txt 文件。内容应该用制表符分隔。它应该有 3 列,并且第 3 列应该用元胞数组中的字符串填充。比方说

A=[2; 3; 3;];
B=2*A;
C=cell(3,1);
C{1,1}='string1'; C{2,1}='string2'; C{3,1}='string3';

最后,它应该如下所示:

    2  4  string1
    3  6  string2
    3  6  string3

我已经发现,如何将 2 个矩阵放在一个文本文件中: dlmwrite('filename.txt', [AB], 'delimiter', '\t')

但是如何附加单元格的内容呢?最好只在文件中包含字符串,而不是单引号。我没有在其他地方找到解决方案,也没有在其他地方问过这个问题。我很欣赏各种建议。

4

2 回答 2

3

尝试以下操作:

% Open a file for writing (if you want to append to file use 'a' instead of 'w')
fid = fopen(file,'w');

for i = 1:size(A,1)
    fprintf(fid,'%d  %d  %s\n',A(i),B(i),C{i})
end

fclose(fid)

希望这可以帮助

于 2012-11-16T16:36:51.893 回答
1

dlmwrite 上的文档指出:

评论

生成的文件可由电子表格程序读取。

dlmwrite 函数不接受输入矩阵 M 的元胞数组。要导出仅包含数值数据的元胞数组,请在调用 csvwrite 之前使用 cell2mat 将元胞数组转换为数值矩阵。

要导出包含混合字母和数字数据的元胞数组,其中每个元胞包含一个元素,您可以使用 xlswrite 创建一个 Excel 电子表格(如果您的系统安装了 Excel)。对于所有其他情况,您必须使用低级导出函数来写入数据。

因此,要么将其编写为 Excel 电子表格,要么使用必须编写自己的转换函数。

例如

A=[2; 3; 3;];
B=2*A;
C=cell(3,1);
C{1,1}='string1'; C{2,1}='string2'; C{3,1}='string3';

% First solution
f = fopen('filename.txt', 'w');
for n = 1:3
    fprintf(f, '%d\t%d\t%s\n', A(n), B(n), C{n});
end
fclose(f);

% Another solution
% create the table as a single cell array with only strings
C2 = [arrayfun(@num2str, [A, B], 'UniformOutput', false) C]'; % <- note the transpose

f = fopen('filename.txt', 'w');
fprintf(f, '%s\t%s\t%s\n', C2{:}); % <- every three entries are written as a line
fclose(f);
于 2012-11-16T16:35:35.213 回答