2016-11-20 4 views
1
result  'output1' 'output2' 
result1  [1.0000] [0.0182] 
counter  [  2] [  0] 
percentage [  4] [  7] 

私はテーブルに出力を格納しています(T)、200個のループ結果をすべて1つのテキストファイルに出力します。私は既にwritetable関数で試してみたが、いつも問題がある。出力は前の出力を上書きする。テーブルの結果をループでテキスト形式で出力して保存する方法は?

fid = fopen(filename,'w'); 
for i = 1:200 
writetable(T,'finalresult.txt','Delimiter','\t','WriteRowNames',true); 
end 
fclose(fid); 

出力は次のようにする必要があります:

result  'output1' 'output2' 
result1  [1.0000] [0.0182] 
counter  [  2] [  0] 
percentage [  4] [  7] 


result  'output1' 'output2' 
result1  [0.0182] [1.0000] 
counter  [  3] [  0] 
percentage [  4] [  7] 

というようにMATLABのdocumentation for writetableあたりのI = 200

答えて

1

すべての出力のために、これはデフォルトの動作です。

  • filenameは、既存のテキストファイルの名前である場合には、writetableはファイルを上書きします。

これには2つのオプションがあります:独自のエクスポートルーチンを作成するか、目的の動作でMATLABをオーバーロードします。後者を見てみましょう。


                                                        enter image description here

警告:デフォルトのMATLAB動作を変更すると、予期しない結果とエラーが発生する可能性があります。終了時にMATLABの状態を元に戻すことができるように、のコピーをのMATLABのデフォルトファイルに変更してください。あなたがそれらを読んで、自分の行動を理解するためにopenを使用できるように


は幸いにも私たちのために、ソースtableためのコードとその関連メソッドは、現在開いています。 writetableは、文書化されていないtable.writeの薄いラッパーであり、入力引数を解析し、テキストファイルまたはスプレッドシートに書き込むかどうかを決定します。テキストの場合、MATLABはテーブル・データをテキスト・ファイルに書き込む処理を行うwriteTextFile関数(やはり文書化されていません)を呼び出します。既存を破棄しますfopenのドキュメント毎の

% Open the file for writing 
[fid,errmsg] = fopen(file,'Wt'); % text mode: CRLF -> LF 

これは('W')を書き込むためのファイルを開き、:

あなたはline 25を見れば、あなたはMATLABは、次のように記述するためのファイルを開くことがわかります内容writeTextFileのコピーを保存して、fopenの呼び出しを上書きするのではなく、データを追加するように変更すると、目的の動作が得られるはずです。MATLABのFunction Precedence Orderパー

% Open the file for writing 
fprintf('!!! Using overloaded writeTextFile D:\n%s\n', mfilename('fullpath')); 
[fid,errmsg] = fopen(file,'At'); % text mode: CRLF -> LF 

、プライベートまたはオブジェクトの機能は、MATLABのパスに機能より優先されますので、我々は、元と同じ場所にこの変更されたファイルを配置する必要があります。あなたはこのwhich -allを使用してこの場所を見つけることができます。

>> which writeTextFile -all 
C:\excaza\writeTextFile.m 
C:\Program Files\MATLAB\R2016b\toolbox\matlab\datatypes\@tabular\writeTextFile.m % tabular method 

あなたの保存されたコピーとMATLABの組み込みのバージョンが表示されるはずです。 の名前を組み込み関数(例:writeTextFile_builtin.m)に変更し、変更したバージョンのファイルをフォルダにコピーする必要があります。 clear allを1回実行して、メモリキャッシュバージョンの関数をクリアします。

我々は今、我々は望ましい結果達成したかどうかを確認するためにテストすることができます。変更を元に戻すようにしてください、あなたが完了したら

Row var1 
hi 1 
Row var2 
hi 2 

test.txtを返し
filename = 'test.txt'; 

var1 = 1; 
var2 = 2; 

T1 = table(var1, 'RowNames', {'hi'}); 
T2 = table(var2, 'RowNames', {'hi'}); 

writetable(T1, filename) 
writetable(T2, filename) 

をあなたは組み込みにしました。

0
a1=0.1; 
a2=0.2; 

opt =fopen('test.txt','a'); 

for i=1: size(t,1)

j=1; 
    if(i==1) 
     s=strcat('\n','result','\t',t(i,j),'\t',t(i,j+1),'\n'); 
     s=s{1}; 
    end 
    if (i==2) 
     a1=t{i,j}; 
     a2=t{i,j+1}; 

    s=strcat('\n','result1','\t',num2str(a1),'\t',num2str(a2),'\n'); 
end 

if (i==3) 
    a1=t{i,j}; 
    a2=t{i,j+1}; 

    s=strcat('\n','counter','\t',num2str(a1),'\t',num2str(a2),'\n'); 
end 

    if (i==4) 
    a1=t{i,j}; 
    a2=t{i,j+1}; 

    s=strcat('\n','counter1','\t',num2str(a1),'\t',num2str(a2),'\n'); 
end 
if (i==5) 
    a1=t{i,j}; 
    a2=t{i,j+1}; 

    s=strcat('\n','percentage','\t',num2str(s1),'\t',num2str(s1),'\n'); 
end 



    fprintf(opt,s); 
end 

出力は、私がどんな機能変更を行うことなく、それを解決し、この

result  output1  output2 

result1  1.0000  0.0182 

counter  1   1 

counter1  0   0 

percentage 0   0 

のようになります。 @ブライアンは答え、明確な説明をありがとう。

関連する問題