如何在MATLAB中将字符串和矩阵写入.txt文件?

时间:2010-12-29 19:01:27

标签: string matlab matrix file-io text-files

我需要在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解决方案,因为数据很大,时间也是个问题。

4 个答案:

答案 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