2014-07-21 56 views
1

我正在試圖獲得一個循環來在矩陣之間寫入來自matlab的.txt文件的標題。在matlab中用fprintf和dlmwrite寫入文件在循環中

示例代碼:

filename = 'sampleXLS.dat'; 
datfile = fopen(filename,'w'); 

header = 'Header \n'; 
mat1 = [1,2,3;4,5,6]; 
mat2 = [7,8;9,10]; 
mat3 = [11;12;13]; 

mats = {mat1,mat2,mat3}; 
for iter = 1:length(mats) 
    data = mats{iter} 
    fprintf(datfile, header); 
    dlmwrite(filename, data,'-append','delimiter',' ','precision', '%f'); 
end 

我想

Header 
1 2 3 
4 5 6 
Header 
7 8 
9 10 
Header 
11 
12 
13 

我越來越

Header 
Header 
Header 
3 
4 5 6 
7 8 
9 10 
11 
12 
13 

注意失蹤1和2,當我一步,雖然在調試模式下的文件時,它插入和替換數字與標題,因爲它沿着。

有沒有辦法告訴fprintf追加?

回答

0

打開文件句柄時,此句柄的狀態包含當前位置。詳情請查詢fopen(fileID)

您必須將文件句柄設置爲在文件末尾使用fseek(datfile, 0, 'eof');進行寫入,否則您將繼續寫入之前停止的地方。

filename = 'sampleXLS.dat'; 
datfile = fopen(filename,'w'); 

header = 'Header \n'; 
mat1 = [1,2,3;4,5,6]; 
mat2 = [7,8;9,10]; 
mat3 = [11;12;13]; 

mats = {mat1,mat2,mat3}; 
for iter = 1:length(mats) 

    data = mats{iter}; 
    fseek(datfile, 0, 'eof'); 
    fprintf(datfile, header); 

    dlmwrite(filename, data,'-append','delimiter',' ','precision', '%f'); 
end 

另外,您可以使用a代替w只允許在最後追加打開文件。

filename = 'sampleXLS.dat'; 
datfile = fopen(filename,'a'); 

header = 'Header \n'; 
mat1 = [1,2,3;4,5,6]; 
mat2 = [7,8;9,10]; 
mat3 = [11;12;13]; 

mats = {mat1,mat2,mat3}; 
for iter = 1:length(mats) 

    data = mats{iter}; 
    fprintf(datfile, header); 

    dlmwrite(filename, data,'-append','delimiter',' ','precision', '%f'); 
end