我有一个文件夹A,其中包含文件夹B和C
A--B
C--|
--|mat file
在文件夹级别,我有一个启动scrit,我希望从这个脚本加载C1文件夹中可用的data.mat文件中的数据。
所以从我的脚本A_script.m开始,我做了:
load('C/C1/data.mat');
脚本文件的内容:
function data_startup
%WHC_PROJECT_STARTUP
bdclose all;
load('B\C\data_v2.0.mat');
但这没有做任何事情,数据未加载且没有错误引发! 有人能帮助我吗?
感谢
答案 0 :(得分:3)
原因是因为函数引入了自己的变量scope。 1 .mat文件中的变量将被加载到函数的范围内,但不会加载到全局范围内
<子> 1。另请参阅http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html#f0-38463。
答案 1 :(得分:1)
我从这个问题中理解的是,您将数据存储在子文件夹中的.mat文件中,并且您希望将其用于某种初始化。如果您希望稍后从基础工作区使用它们,那么可以将一个功能更改为脚本:
%WHC_PROJECT_STARTUP
bdclose all;
load(fullfile('B', 'C', 'data_v2.0.mat'));
我建议在这里使用函数
fullfile('B', 'C', 'data_v2.0.mat')
因为这会使你的代码与平台无关(Linux使用'/',Windows'\')。如果您想在基础工作区中加载.mat文件的内容,只需将上面的代码保存为脚本并执行它。
如果您坚持在函数中读取文件并稍后在基础工作区中使用它,那么请查看以下代码
function data_startup()
%WHC_PROJECT_STARTUP
bdclose all;
temp_data=load(fullfile('B', 'C', 'data_v2.0.mat')); % will be loaded as structure
file_variables=fieldnames(temp_data);% get the field names as cell array
for ii=1:length(file_variables)
% file_variables{ii} - string of the field name
% temp_data.(file_variables{ii}) - dynamic field reference
assignin('base', file_variables{ii}, temp_data.(file_variables{ii}));
end
代码应该有效,现在我在家里无法测试,抱歉。
我更喜欢脚本解决方案,将变量从一个工作空间分配到另一个工作空间可能会导致支持和代码扩展的问题(突然变量被创建,你不会看到它们来自哪里)。 以下是一些more examples如何动态访问结构的字段。
答案 2 :(得分:0)
你可以修改你的函数以得到这样的输出,然后在你的父(调用者)函数中你可以使用这个输出变量中的数据
function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');