如何使用两个向量变量格式化打印语句?

时间:2017-08-16 17:27:22

标签: matlab file-writing

我想在同一个.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文件?

2 个答案:

答案 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的参数的顺序为A1A2。它首先打印来自A1的所有值,然后以单个索引顺序打印A2中的所有值。

因此,如果要在打印期间替换xy中的值,则需要将它们插入到新变量中。有几种可能的方法可以做到这一点。

一个例子,

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给出:每个参数将按照它在参数列表中出现的顺序完全迭代,因此您必须组合数据到一个矩阵参数,将逐列迭代生成所需的输出。

你还提到了尝试使用tablewritetable函数,所以我想在你好奇的时候添加正确的方法:

ResultsTable2 = table(x(:), y(:));  % Pass data as column vectors
writetable(ResultsTable2, 'Results.txt', 'WriteVariableNames', false);