2015-10-14 50 views
0

我在MATLAB以下代碼:使用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列等)。

然而,什麼是發生反而是

一)在文件上印有第一行頭。 另外,來自數據的15個數字也在同一行上。

b)文件按預期打印每行15個元素。 但是,它實際上正在打印列向量橫向,在每15個元素之後切斷它們並從換行開始。它會在每個數據列表的末尾切斷這個列表,可能會開始一個換行符或幾個,取決於它的情緒(它沒有一致的換行符,它偶爾也不會啓動一個全部),然後從換行上的下一個列表中開始一些數據(但不足以覆蓋整行,並且離開其餘數據的中心),數量也不一致。然而,在奇怪的行之後,數據再次看起來正常(相對於程序在做什麼)

我對於發生了什麼事情一無所知。請發送幫助。

回答

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字段格式字符串並不像您期望的那樣截斷您的數據,即使此時它也會從A逐列讀取數據,從T,然後從每B值等

因此,底線是,我寧願做這樣的:

A = [T,B,C,D,E,F,G,H,I,J,K,L,M,N,O]; 

fileID = fopen('baseline1.txt','w'); 
fprintf(fileID,['%6s ' repmat('%12s ',[1 14]) '\n'],'T','B','C','D','E','F','G','H','I','J','K','L','M','N','O'); 
fprintf(fileID,['%6s ' repmat('%12s ',[1 14]) '\n'],A.'); 
fclose(fileID); 
+0

這有點兒* *所取得的進展。現在數據處於正確的方向,但前幾行是各種各樣的扭曲。之後,數據有一個正確的方向,*看起來像一張桌子,但是T和B相對於其他所有東西都粘在列的右側。另外,其中一個列表顯然是從一堆「d」開始的?我不知道爲什麼。 (如果有幫助,這些列向量由ode15s生成:是的,diff eq求解器必須是僵硬的) –

+0

@BreakingBioinformatics,請確認1.您使用上面的確切代碼,以及2.您的'A'是大小爲[N,15]'。來想一想:不是數組數組?然後'%12s'不會是一個合適的字段說明符... –

+0

1.我爲代碼更改的唯一內容是列表/列表標題的名稱(列表實際上不是名稱B,D和G以及其他內容)。 2. A是[N,15],它是一個數字數組,除了那些奇怪的「d」。 –