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

11 次查看(过去 30 天)
MathWorks Support Team
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
これは、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!