saveobj
オーバーロード中に読み込み中または保存中のファイル パスを取得することは可能loadobj
ですか?
残念ながら、matlab は保存またはロードする構造体のみを提供しますが、このパラメーターは直接提供されません。この情報を取得するためのトリックがあるかどうか疑問に思っていました。
saveobj
オーバーロード中に読み込み中または保存中のファイル パスを取得することは可能loadobj
ですか?
残念ながら、matlab は保存またはロードする構造体のみを提供しますが、このパラメーターは直接提供されません。この情報を取得するためのトリックがあるかどうか疑問に思っていました。
evalc
ファイル名変数の取得に使用save
関数構文を使用して呼び出しているとします。例えば、
tt = timer; % for timer/saveobj overloaded method
fname = 'test.mat'; varname = 'tt';
save(fname,varname)
ではsaveobj
、 を使用evalin
して変数を取得しfname
ます。上記の例ですばやくテストするには、 の最初の行にブレークポイントを設定しますtimer\saveobj
。
>> dbstop in timer\saveobj
>> save(fname,varname)
23 if isvalid(obj)
K>> fname = evalin('caller','fname')
fname =
timertest.mat
K>>
は組み込みコマンドであるため、save
の個別のスタックはなくsave
、 の呼び出し元はコマンドsaveobj
を実行したものになりますsave
。この例では、ベース ワークスペースです。
K>> dbstack
> In timer.saveobj at 23
K>> dbup
In base workspace.
K>> dbdown
In workspace belonging to timer.saveobj at 23
fname
完全なファイル名である場合にパスを取得する方法を知っていると確信していますが、完全を期すために、
filePath = fileparts(fname) % empty when no path specified
dbstack
とを使用してコマンドdbtype
を解析するsave
save
このメソッドは、スクリプトから呼び出している場合にのみ機能します。(ベース ワークスペースの) コマンド ラインで入力した場合は機能しません。save
ただし、ファイル名が変数にある必要はありません。
次のコードがsaveobj
メソッドに含まれます。
[st,I]=dbstack('-completenames');
fname = regexp(evalc('dbtype(st(2).file,num2str(st(2).line))'),...
'(?<=save\()(\S*)(?=,)','match','once');
たとえば、テスト スクリプトsave
で一時的なリテラルを使用すると、
>> dbstop in timer\saveobj
>> save('C:\timertest.mat',varname)
23 if isvalid(obj)
K>> st = dbstack('-completenames');
K>> fname = regexp(evalc('dbtype(st(2).file,num2str(st(2).line))'),'(?<=save\()(\S*)(?=,)','match','once')
fname =
'C:\timertest.mat'
ファイル名を文字列で取得し、以前と同じように でパスを取得しますfileparts
。