我想在同一个.txt文件上写几个消息和表。
例如:
x=[23.9,10.9,8.9,14.2]
y=[9.83,8.04,7.47,8.32]
file=fopen('Results.txt','wt');
fprintf(file,'Results1\n');
fprintf(file,'%.2f %.2f\r\n',x,y);
fprintf(file,'Results2\n');
fclose(file);
我得到的结果为.txt:
Results1
23.90 10.90
8.90 14.20
9.83 8.04
7.47 8.32
Results2
但我应该得到这个:
Results1
23.90 9.83
10.90 8.04
8.90 7.47
14.20 8.32
Results2
而不是fprintf(file,'%.2f %.2f\r\n',x,y);)
,我试图使用:
ResultsTable2 = table(x,y);
writetable(file,ResultsTable2);
但没有成功。如何编写所需的.txt文件?
答案 0 :(得分:2)
仔细检查您的输出显示x
的所有元素都在y
的所有元素之前打印。
文档证实这是预期的行为。查看this example
A1 = [9.9, 9900];
A2 = [8.8, 7.7 ; ...
8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)
X是9.90米或9900.000 mm
X是8.80米或8800.000 mm
X是7.70米或7700.000 mm
即使fprintf
的参数的顺序为A1
,A2
。它首先打印来自A1
的所有值,然后以单个索引顺序打印A2
中的所有值。
因此,如果要在打印期间替换x
和y
中的值,则需要将它们插入到新变量中。有几种可能的方法可以做到这一点。
一个例子,
XY = reshape([x;y], 1, []);
然后一切都应按预期打印
fprintf(file, '%.2f %.2f\r\n', XY);
% or if you want to print to command window
% fprintf('%.2f %.2f\r\n', XY);
23.90 9.83
10.90 8.04
8.90 7.47
14.20 8.32
答案 1 :(得分:2)
如何使用fprintf
输出数据的正确答案由Cecilia给出:每个参数将按照它在参数列表中出现的顺序完全迭代,因此您必须组合数据到一个矩阵参数,将逐列迭代生成所需的输出。
你还提到了尝试使用table
和writetable
函数,所以我想在你好奇的时候添加正确的方法:
ResultsTable2 = table(x(:), y(:)); % Pass data as column vectors
writetable(ResultsTable2, 'Results.txt', 'WriteVariableNames', false);