我在MATLAB中有以下代码:
A = [T,B,C,D,E,F,G,H,I,J,K,L,M,N,O];
fileID = fopen('baseline1.txt','w');
fprintf(fileID,'%6s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s\n','T','B','C','D','E','F','G','H','I','J','K','L','M','N','O');
fprintf(fileID,'%6s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s\n',A);
fclose(fileID);
T和B-O都是具有~1500个元素的列向量。
此代码的要点是将这些元素打印到一个大文本文件中,该文件将列表名称为T和BO在顶部,并列出其标题下每个变量的值(因此T的所有内容都将结束在T栏等)。
然而,正在发生什么是
a)文件的第一行印有标题。 此外,数据中的15个数字也在同一行。
b)文件按预期每行打印15个元素。 然而,它实际上是打印列向量横向,在每15个元素之后切断它们并从换行开始。它将在每个数据列表的末尾切断列表,可能会根据其情绪开始换行或换行(有一些换行符不一致,并且偶尔也不会启动一行换行符(根本),然后从换行符的下一个列表中开始一些数据(但不足以覆盖整行,并且从其余数据偏离中心),数量也不一致。然而,在奇怪的线之后,数据再次看起来正常(相对于程序正在做的事情)
我几乎不知道发生了什么。请发送帮助。
答案 0 :(得分:1)
fprintf
以列方式访问其数据,同时按行打印数据。尝试在打印件中转置A
:
fprintf(fileID,'%6s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s\n',A.');
另一个问题是你的打印中有16个字段,但只有15个变量被赋予fprintf
。你有一个%12s
太多了。我建议使用['%6s ' repmat('%12s ',[1 14]) '\n']
生成格式字符串。
MATLAB有一种奇怪的行为,如果输入参数少于格式字段,那么格式字符串将被截断。例如,
fprintf('%d %d %d\n',[1 3]);
将在没有换行符的情况下打印[1 3]
,因为它无法到达格式字符串的末尾。它完全没有逻辑,也没有用,但它只是它的工作方式。
在A
的打印中,有两件事发生冲突:首先,您的16字段格式字符串不会像您期望的那样切断数据,即使这样,它也会从{{1首先是来自A
的每个值,然后来自T
的每个值,等等。
所以,底线是我宁愿这样做:
B