用循环中的fprintf和dlmwrite在matlab中编写文件

时间:2014-07-21 23:11:53

标签: matlab loops printf

我正在尝试使用matlab将矩阵之间的标头写入.txt文件。

示例代码:

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追加?

2 个答案:

答案 0 :(得分: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 只允许在最后添加。

{{1}}

答案 1 :(得分:0)