如何使用两个矢量变量来格式化打印语句?
问题描述:
我想在同一个.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文件?
答
仔细检查您的输出结果,显示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
开始的单个索引顺序的值。
因此,如果要在打印期间从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
答
如何输出数据与fprintf
由Cecilia给出正确的答案:每个参数将完全通过它出现在参数列表的顺序重复,所以你必须合并数据整合到一个矩阵参数中,该参数将通过逐列迭代来生成所需的输出。
您也提到试图用一个table
和writetable
功能,所以我虽然我想补充的正确办法做到这一点的情况下,你是好奇:
ResultsTable2 = table(x(:), y(:)); % Pass data as column vectors
writetable(ResultsTable2, 'Results.txt', 'WriteVariableNames', false);
你试图打开该文件中追加模式'fopen('...','at')' – jandob
是的。我相信可写入的并不是正确的命令 –