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

问题描述:

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

你试图打开该文件中追加模式'fopen('...','at')' – jandob

+0

是的。我相信可写入的并不是正确的命令 –

仔细检查您的输出结果,显示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毫米

X是8.80米或8800.000毫米

X是7.70米或7700.000毫米

即使参数fprintf的顺序是A1,A2。它首先打印来自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

如何输出数据与fprintfCecilia给出正确的答案:每个参数将完全通过它出现在参数列表的顺序重复,所以你必须合并数据整合到一个矩阵参数中,该参数将通过逐列迭代来生成所需的输出。

您也提到试图用一个tablewritetable功能,所以我虽然我想补充的正确办法做到这一点的情况下,你是好奇:

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