0

私はプログラミングがまったく初めてで、自分が何をしているのかわかりません。sprintf コマンドを機能させようとして、一日中立ち往生しています。私が正しく理解していれば、書き込み先のファイルを次のように初期化する必要があります。

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

それらの間にはたくさんのものがありますが、これらがすべて関連する部分であることを願っています. ログファイルが作成されますが、何をしても何も書き込まれません。私は何を間違っていますか?

4

3 に答える 3

1

sprintfデータを文字列にフォーマットします。コードがまったく実行されることに驚いています。fprintfファイルに出力したい。

于 2012-04-19T19:35:07.043 に答える
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);

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

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

% テストされたコード。

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

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

通常fprintf、ファイルとスクリーンの両方で、すべての印刷に使用できます。ファイルに出力するには、fprintf関数呼び出しの最初の引数を にする必要があります。これは、MATLAB ドキュメンテーションやその他の場所でFileID一般的に呼び出されます。orはファイルの名前ではなく、 によって返される単なる数値であり、 と 関連するの間でのみ有効です。これは特定のファイルまたはファイルの内容に関連する定数ではないため、常に の戻り値を格納して、ファイルから読み書きできるようにする必要があります。fidFileIDfidfopenfopenfclosefopen

sprintf画面にもファイルにも何も出力しませんsprintf。ドキュメントに記載されているように、データを文字列にフォーマットするだけです。sprintf出力 (最初の戻り値、2 番目はerr) は、 を使用して画面に出力できますdisp

于 2012-04-19T20:21:32.997 に答える
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);
于 2012-04-19T20:54:34.840 に答える