2010-12-29 30 views
9

MATLABの.txtファイルにデータを書き込む必要があります。私は文字列(fprintfまたは行列(dlmwrite)を書く方法を知っていますが、私は両方を行うことができるものが必要です。以下に例を示します:文字列と行列をMATLABの.txtファイルに書き込むにはどうすればよいですか?

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ソリューションを使用することはできません。データが膨大で時間が問題であるからです。

答えて

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行終端文字が改行の後に改行で構成され、'newline','pc'オプションが指定されたときにDLMWRITEによって使用されるものであるためです。メモ帳で出力テキストファイルを開くときに、行列の最初の行が新しい行に表示されるようにするには、\rが必要です。

+0

おかげでgnovice!あなたは私をもう一度助けてくれました! – Maddy

+0

私は関連がありますQ: 私のシステムでコードが正しく動作します。しかし、リモートデスクトップをサーバに接続し、Matlabのパスをローカルのmatlabディレクトリに設定すると、同じコードでファイルを設定できません。プロジェクト全体が正しく実行されますが、ファイルプロシージャは失敗しています。コメントはありますか?ありがとう – Maddy

+0

@マディ:どのように失敗ですか?どのようなエラーが出ますか? – gnovice

2

2つのdlmwrite()呼び出しがあります。最初は空の行列で、もう1つは '区切り文字'オプションがありません。 2番目のコールに追加するとどうなりますか?

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'); 
1

私はcsvにヘッダを追加して同様の状況に遭遇しました。以下に示すように、区切り文字を''に設定して、dlmwriteを-appendと組み合わせて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 
関連する問題