使用matlab打印大列向量的文本文件的问题

时间:2015-10-14 22:27:23

标签: matlab text

我在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个元素之后切断它们并从换行开始。它将在每个数据列表的末尾切断列表,可能会根据其情绪开始换行或换行(有一些换行符不一致,并且偶尔也不会启动一行换行符(根本),然后从换行符的下一个列表中开始一些数据(但不足以覆盖整行,并且从其余数据偏离中心),数量也不一致。然而,在奇怪的线之后,数据再次看起来正常(相对于程序正在做的事情)

我几乎不知道发生了什么。请发送帮助。

1 个答案:

答案 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