2012-04-19 21 views
0

私はプログラミングに全く新しいし、私が何をしているのか分かりません。私は一日中働いてsprintfコマンドを取得しようとしていました。私が正しく理解していれば、私はそれがそうのように書きたいファイルを初期化する必要があります:sprintfがmatlabで動作しないのはなぜですか?

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
fopen(recalltest, 'wt'); 
if recalltest == -1 
    error('Error opening log file'); 
end 

をその後、私は、ファイルに書き込またい変数を定義します。

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

そして、それらのそれぞれの間での原料の束があり

sprintf(recalltest, '%s,', recall1); 
fclose('all'); 

が、私は、これらは、すべての関連する部分です期待しています:私は私のログファイルにその変数を記述してみてください。ログファイルが作成されますが、私が何をしても何も書き込むことはできません。私は間違って何をしていますか?

答えて

1

sprintfデータを文字列にフォーマットします。私はコードがまったく動いているのに驚いています。 fprintfをファイルに出力します。

+0

何も変わりません。 – nikipedia

1

コードの一部の修正:

テスト済みのコード。

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
FileID = fopen(recalltest, 'wt'); 
if FileID == -1 
    error('Error opening log file'); 
end 

テスト済みのコードが終了します。

GetEchoString関数呼び出しになります。このコードが失敗した場合、理由はおそらくこの関数呼び出しまたは関数自体にあります。

%テストされていないコード。

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

%テストされていないコードが終了しました。

あなたは、文字列recall1,を印刷し、あなたのfprintf呼び出し、中'%s,'を持っていました。 これが目的の場合は、,を次のコード行に戻します。印刷前にstrcatを使用してrecall1に追加することもできます。

テスト済みのコード。

fprintf(FileID, '%s', recall1); 
fclose(FileID); 

テスト済みのコードが終了します。

通常、ファイルと画面の両方に、すべての印刷にfprintfを使用できます。ファイルに印刷するには、fprintfファンクションコールの最初の引数はFileIDでなければなりません。これはMATLABのドキュメントや他の場所では一般にfidと呼ばれます。 FileIDまたはfidはファイルの名前ではなく、fopenによって返された番号に過ぎず、fopenと関連するfcloseの間でのみ有効です。特定のファイルまたはファイルの内容に関連する定数ではないため、ファイルの読み取りまたは書き込みには常にfopenの戻り値を格納する必要があります。

sprintfsprintfドキュメントに記載されているように、画面やファイルには印刷できません。データは文字列にのみフォーマットされます。 sprintf出力(最初に返される値、2番目の値はerr)は、dispを使用して画面に出力できます。私はfprintfの代わりに使用する場合

+0

ありがとう、ファイルIDビットはそれを解決しました。 – nikipedia

0
recalltest = sprintf('DRMRecall_%d.log', subNo); % usage of sprintf to create a string 
fid = fopen(recalltest, 'wt'); 
assert(fid ~= -1, 'Error opening log file'); % save if... 
recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 
fprintf(fid, '%s\n', recall1); % usage of fprintf to write to a file 
fclose(fid); 
関連する問題