web-dev-qa-db-ja.com

文字列と行列をMATLABの.txtファイルに書き込むにはどうすればよいですか?

MATLABで.txtファイルにデータを書き込む必要があります。文字列(fprintfor行列(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ソリューションを使用できません。

9
Maddy

問題を修正するために必要なことは、キャリッジリターン(\r)を [〜#〜] fprintf [〜#〜] ステートメントに追加し、 [〜#〜] 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


注:簡単な説明... \rが必要な理由[〜#〜] fprintf [〜#〜] ステートメントは、PCラインターミネータがキャリッジリターンとそれに続くラインフィードで構成されているため、 で使用されます[〜 #〜] dlmwrite [〜#〜]'newline','pc'オプションが指定されている場合。メモ帳で出力テキストファイルを開いたときに、マトリックスの最初の行が新しい行に表示されるようにするには、\rが必要です。

24
gnovice

空の行列呼び出しは必要ありません。このコードを試してください:

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');
5
Charles L.

2つのdlmwrite()呼び出しがあり、最初の呼び出しは空の行列で、2番目の呼び出しには 'delimiter'オプションがありません。それを2番目の呼び出しに追加するとどうなりますか?

2
Andrew Janke

私はcsvにヘッダーを追加する同様の状況に遭遇しました。以下に示すように、区切り文字を''に設定することにより、-appendでdlmwriteを使用して1行を追加できます。

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
1
mlanzero