プログラム内で FPRINTF 関数を使って作成した​スクリプトを直接実行​できないのはなぜです​か?

조회 수: 13 (최근 30일)
MathWorks Support Team
MathWorks Support Team 2012년 12월 14일
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
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개)

카테고리

Help CenterFile Exchange에서 検索パス에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!