我需要在MATLAB中将数据写入.txt文件。我知道如何编写字符串(fprintf
)或矩阵(dlmwrite
),但我需要能够同时完成这两者的事情。我将在下面举一个例子:
str = 'This is the matrix: ' ;
mat1 = [23 46 ; 56 67] ;
%fName
if *fid is valid*
fprintf(fid, '%s\n', str)
fclose(fid)
end
dlmwrite(fName, *emptymatrix*, '-append', 'delimiter', '\t', 'newline','pc')
dlmwrite(fName, mat1, '-append', 'newline', 'pc')
这没关系,但有问题。该文件的第一行是:
This is the matrix: 23,46
这不是我想要的。我想看看:
This is the matrix:
23 46
56 67
我该如何解决这个问题?我不能使用for循环和printf
解决方案,因为数据很大,时间也是个问题。
答案 0 :(得分:24)
我认为您需要做的就是解决问题的方法是在FPRINTF语句中添加回车符(\r
)并删除对DLMWRITE的第一次调用:
str = 'This is the matrix: '; %# A string
mat1 = [23 46; 56 67]; %# A 2-by-2 matrix
fName = 'str_and_mat.txt'; %# A file name
fid = fopen(fName,'w'); %# Open the file
if fid ~= -1
fprintf(fid,'%s\r\n',str); %# Print the string
fclose(fid); %# Close the file
end
dlmwrite(fName,mat1,'-append',... %# Print the matrix
'delimiter','\t',...
'newline','pc');
文件中的输出如下所示(数字之间带有标签):
This is the matrix:
23 46
56 67
注意:简短说明...在FPRINTF语句中需要\r
的原因是因为PC行终止符由回车符后跟换行符组成,DLMWRITE在指定'newline','pc'
选项时使用的内容。在记事本中打开输出文本文件时,需要\r
以确保矩阵的第一行出现在新行上。
答案 1 :(得分:5)
您不需要空矩阵调用。试试这段代码:
str = 'This is the matrix: ' ;
mat1 = [23 46 ; 56 67] ;
fName = 'output.txt';
fid = fopen('output.txt','w');
if fid>=0
fprintf(fid, '%s\n', str)
fclose(fid)
end
dlmwrite(fName, mat1, '-append', 'newline', 'pc', 'delimiter','\t');
答案 2 :(得分:2)
你有两个dlmwrite()调用,第一个是空矩阵,第二个是缺少'delimiter'选项。如果将其添加到第二个呼叫会发生什么?
答案 3 :(得分:1)
我遇到了类似的情况,在csv中添加了一个标题。您可以将dlmwrite与-append一起使用,通过将分隔符设置为''
来添加单行,如下所示。
str = 'This is the matrix: '; %# A string
mat1 = [23 46; 56 67]; %# A 2-by-2 matrix
fName = 'str_and_mat.txt'; %# A file name
header1 = 'A, B'
dlmwrite(fName, str, 'delimiter', '')
dlmwrite(fName, header1, '-append', 'delimiter', '')
dlmwrite(fName, mat1, '-append','delimiter', ',')
这会产生以下结果:
This is the matrix:
A, B
23,46
56,67