【发布时间】:2015-07-31 03:49:09
【问题描述】:
我编写了一个函数,通过使用dir 捕获通配符然后调用load,将带有通配符的mat 文件加载到结构中。这是函数:
function S = loadw(varargin)
%LOADW Load variables from file into workspace, with wildcard (*) in file name
filename = varargin{1};
if(ismember('*', filename))
[pathstr, ~, ext] = fileparts(filename);
if(isempty(pathstr))
pathstr = '.';
end
if(~strcmp(ext, '.mat'))
filename = [filename '.mat'];
end
dirFiles = dir(filename);
if(isempty(dirFiles))
error(['Unable to read file ''' filename ''': no such file or directory.']);
elseif(numel(dirFiles) == 1)
varargin{1} = [pathstr filesep dirFiles(1).name];
S = load(varargin{:});
else
S = cell(numel(dirFiles), 1);
for iFile = 1:numel(dirFiles)
varargin{1} = [pathstr filesep dirFiles(iFile).name];
S{iFile} = load(varargin{:});
end
end
else
S = load(varargin{:});
end
这很好用,但是它只能将文件加载到结构中,而不能像 load 那样加载到调用者工作区中。
如何修改此函数以设置调用方工作区中的变量?
我曾考虑使用assignin 来执行此操作,但这意味着我首先将变量加载到函数工作区,然后将它们传输到调用者工作区。我更喜欢不需要两次声明变量的方法。如果不重新实现load,这可能吗?或者,也许两次声明变量没有开销,因此使用assignin('caller',...) 实际上是一个有效的解决方案?
【问题讨论】:
标签: matlab