目次
はじめに
関数のリンク先
コードの中身について
概要
関数の定義と説明
関数のドキュメント
入力処理
ツールボックスの特定
まとめ
注意点
おわりに
はじめに
こんにちは、HerniaBabyです。
皆さん、こんなことないですか?
せっかく作ったMATLABコードを他の人に渡すとき、先方にこんなセリフを吐かれてしまうなんてこと…
「必要なToolboxしか入れたくないんだけど?どれがいるん?」
今回はそんなワガママベイビーな方々の要望にかなえる関数を作成しました。
関数のリンク先
File Exchangeにも掲載中です。
GitHub Link :findRequiredToolboxes
コードの中身について
ChatGPTに説明させます笑
概要
このMATLABコードは、指定されたMATLABスクリプトや関数ファイルに必要なツールボックスを特定するための関数findRequiredToolboxesを定義しています。
この関数は、.m、.mlx、および.slxファイルタイプに対応しています。以下にコードの詳細な説明を示します。
関数の定義と説明
function requiredToolboxes = findRequiredToolboxes(scriptPath)
- findRequiredToolboxes は関数名です。
- scriptPath は入力引数で、MATLABスクリプトや関数のファイルパスを表します。
-
requiredToolboxes は出力で、必要なツールボックスのリストが入ります。
関数のドキュメント
% findRequiredToolboxes - 指定されたMATLABスクリプトや関数に必要なツールボックスを特定します。
%
% Syntax: requiredToolboxes = findRequiredToolboxes(scriptPath)
%
% Inputs:
% scriptPath - 必要なツールボックスを特定したいMATLABスクリプトや関数のファイルパス
%
% Outputs:
% requiredToolboxes - 必要なツールボックスのリスト
- この部分では、関数の簡単な説明、構文、入力、および出力について説明しています。
入力処理
switch nargin
case 0
[file,path] = uigetfile( ...
{'*.m;*.mlx;*.slx', ...
'MATLAB Files (*.m,*.mlx,*.slx)'; ...
'*.*', 'All Files (*.*)'},'Select a file');
if isequal(file,0)
disp('User selected Cancel');
msg = 'You need to select a file.';
error(msg)
else
path = fullfile(path,file);
end
case 1
path = scriptPath;
end
- ここでは、入力引数scriptPathの処理を行っています。
- 入力引数が提供されていない場合 (nargin == 0)、ファイル選択ダイアログ (uigetfile) がユーザーに表示されます。
- ユーザーがファイル選択をキャンセルした場合、エラーメッセージが表示されます。
- ファイルが選択された場合、そのフルパスが構築されます。
- 入力引数が提供されている場合 (nargin == 1)、pathはscriptPathに設定されます。
ツールボックスの特定
[~,~,ext] = fileparts(path);
if ext == ".slx"
sList = dependencies.toolboxDependencyAnalysis(path);
reqiredToolboxes = string(sList)';
else
[~, pList] = matlab.codetools.requiredFilesAndProducts(path);
Tbox = string({pList.Name}');
Certain = cell2mat({pList.Certain}');
reqiredToolboxes = Tbox(Certain);
end
- 次に、指定されたファイルの拡張子をfilepartsを使って取得します。
-
ファイルがSimulinkモデル(.slx)の場合:
- dependencies.toolboxDependencyAnalysis(path) を使って必要なツールボックスを特定します。
- 結果を文字列配列に変換し、転置します。
- ファイルがMATLABスクリプトや関数(****.m または .mlx****)の場合:
まとめ
- findRequiredToolboxes 関数は、MATLABスクリプト、関数、またはSimulinkモデルに必要なツールボックスを特定するのに役立ちます。
- ファイルパスを直接入力するか、GUIダイアログを使用して選択する柔軟性があります。
- 異なるファイルタイプ(.m、.mlx、.slx)に適切に対応し、必要なツールボックスを特定します。
注意点
試行段階で気づいたんですが、スクリプトの中に関数を入れるとSimulinkが追加されます。
SampleScriptの中身と結果
clc, clear;
disp('This is Sample Code')
txt = findRequiredToolboxes(fullfile(pwd,"SampleScript.m"));
fprintf('This code needs %s \n',txt)
出力
This is Sample Code
This code needs MATLAB
This code needs Simulink
おわりに
ChatGPTすげえ…笑