2013-08-22 60 views
1

我已經多次使用Google來解決關於寫入/輸出到文件的特殊情況,但沒有取得太大的成功。Matlab - 將文本和數值數據寫入循環中的文件

我有一個for循環,它產生了1個單元矩陣和1個正則矩陣。對於每個循環,單元矩陣可以是可變長度的。假設< 1×5的dimentions>,細胞基質存儲以下的字符串:

Aggregated Day, AggreVal from Curve, Val3_Name, Val4_Name, Val5_Name 

細胞基質可以具有用於下一個循環不同的內容和大小。

數字矩陣與單元矩陣具有相同的大小,並表示與單元矩陣中名稱對應的值。因此,對於該環具有大小1×5,並且存儲的值爲:

1.3, 1300, 14, 15, 16 

我想要寫上述細胞和數字矩陣到一個單一的文件(最好是Excel或用於未來的操縱txt文件),爲正在生成它們。首先,我想輸出單元格矩陣,並緊跟在數字矩陣之後。接着是第二個循環的單元矩陣等等。

我記得在C++中通過在追加模式下打開文件很容易,但在Matlab中似乎很棘手。我曾嘗試玩xlswrite,dlmwrite,xlsappend等,但迄今爲止沒有任何工作。

因此,輸出文件看起來是這樣的:

Loop1 
Aggregated Day, AggreVal from Curve, Val3_Name, Val4_Name, Val5_Name 
1.3, 1300, 14, 15, 16 

Loop2 
Aggaed Dy, AgeVal fm Curve, China, Val4_Name, Brazil 
1.453, 1300, 1774, 1115, 1613 

感謝

回答

1

你能避免關閉文件直到所有的循環已經完成,即:

fid = fopen('filename.txt','w'); 

% Loop stuff, adding lines to your file 

fclose(fid); 

它看起來像你想要的輸出是一種自定義格式,而不是一個xls文件,它假定了一個類似於表格的結構。嘗試使用fprintf打印您的數據:

foo = {'abc','def','ghi'}; 
foo2 = [1 2 3 4]; 
fid = fopen('foo.txt','w'); 
fprintf(fid, '%s ', foo{:}); 
fprintf(fid, '\n'); 
fprintf(fid, '%f ', foo2); 
fprintf(fid, '\n'); 
fclose(fid) 
+0

您的代碼不起作用。我對此很陌生,所以我想弄明白爲什麼它不起作用。 – user2707748

+0

對不起,我忘了在fprintf中包含'w'參數(它告訴Matlab你想寫入文件而不是讀取文件)。 –

0

我應該這樣做:

A{1} = {'Aggregated Day', 'AggreVal from Curve', 'Val3_Name', 'Val4_Name', 'Val5_Name'} 
A{2} = {1.3, 1300, 14, 15, 16}; 
B = cat(1,A{:}); 
xlswrite(filename,B); 
+0

它在for循環中不起作用,因爲先前的數據被來自最新循環的信息擦除和寫入。 – user2707748

0
%s={'Aggregated Day', 'AggreVal from Curve', 'Val3_Name', ... 
    'Val4_Name', 'Val5_Name'}; 

%n=[1.3, 1300, 14, 15, 16]; 

filename='myfile.xlsx'; % Change it to myfile.txt if needed for text version 

% the trick is to retain the row number to append contents 

%N = no. of entries. 
for k = 1:2:N    %Sheet  %Row 
    xlswrite(filename, s , 1, sprintf('A%d',k) ) 
    xlswrite(filename, n , 1, sprintf('A%d',k+1)) 
end