1

我有一个文件夹 A,其中包含文件夹 B 和 C

A--B
   C--|
     --|mat file  

在文件夹级别,我有一个启动脚本,我希望从此脚本加载 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');

但这什么也没做,没有加载数据,也没有引发错误!有人能帮我吗 ?

谢谢

4

3 回答 3

3

原因是因为函数引入了自己的变量作用域1 .mat 文件中的变量将被加载到函数的范围内,但不会加载到全局范围内。


1. 另见http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html#f0-38463

于 2012-02-23T15:57:19.077 回答
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

代码应该可以工作,现在我在家,无法测试,对不起。

我更喜欢脚本解决方案,将变量从一个工作区分配到另一个工作区可能会导致代码的支持和扩展出现问题(突然创建变量而您看不到它们来自何处)。下面是一些如何动态访问结构字段的示例。

于 2012-02-23T20:13:36.940 回答
0

您可以修改您的函数以获得这样的输出,然后在您的父(调用者)函数中,您可以使用此输出变量中的数据

function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');
于 2012-02-23T18:05:04.240 回答