プログラム内で FPRINTF 関数を使って作成したスクリプトを直接実行できないのはなぜですか?
11 ビュー (過去 30 日間)
古いコメントを表示
MATLAB スクリプト内で、FPRINTF 関数を用いて別のスクリプトファイルを作成しています。
以下のように、同一スクリプト内で作成されたスクリプトを実行すると、エラーが発生します。
(test.m の内容)
% 別のスクリプトの作成
at_fid = fopen(['new_script.m'], 'w');
fprintf(at_fid, ['mesh(peaks)']);
fclose(at_fid);
new_script % 作成されたスクリプトの実行
(実行例)
>> test
関数または変数 'new_script' が未定義です。
エラーの発生場所 test (line 7)
new_scritp
このスクリプトの内容を、コマンドウィンドウから、もしくはデバッグモードにて一行ずつ実行すると、エラーは発生しません。
採用された回答
MathWorks Support Team
2012 年 12 月 14 日
これは、MATLAB の意図的な動作です。
ファイルの最新の状態は、関数・スクリプトでの実行中には認識されず、関数・スクリプトの実行が終了した時点で認識されます。そのため、スクリプトの実行中に作成された新しいファイル(new_script.m) の存在を認識することができず、エラーが発生します。
ファイルの最新の状態を必要とする場合には、 REHASH コマンドを挿入し、最新の状態を認識させる必要があります。
(test.m の内容)
% 別のスクリプトの作成
at_fid = fopen(['new_script.m'], 'w');
fprintf(at_fid, ['mesh(peaks)']);
fclose(at_fid);
rehash % ファイルの状態のアップデート
new_script % 作成されたスクリプトの実行
コマンドウィンドウ上(もしくはデバッグモード)で一行ずつ実行した場合は、実行毎に内部で REHASH コマンドが実行されるため、ファイルの存在が認識され、エラーは発生しません。
なお、FPRINTF 関数を用いて MATLAB 関数/スクリプトファイルを動的に作成することは、MLint の機能を用いてコーディングのチェックを行うことができないこと、また、MATLAB 言語がインタプリタ言語よりも、他の C++ などのコンパイル言語に近い扱いとなることより、現状では推奨されていません。
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!