Загрузить файл мата в рабочую область

У меня есть папка A, которая содержит папки B и C

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

на уровне папки у меня есть сценарий запуска, и я хочу из этого сценария загрузить данные, доступные в файле data.mat, доступном в папке C1.

Итак, из моего скрипта A_script.m я сделал:

load('C/C1/data.mat');

содержимое файла скрипта:

function data_startup
%WHC_PROJECT_STARTUP
bdclose all;
load('B\C\data_v2.0.mat');

но это ничего не делает, данные не загружены и никаких ошибок не возникает! Кто-нибудь может мне помочь?

Спасибо

3 ответа

Решение

Из этого вопроса я понимаю, что у вас есть данные, хранящиеся в.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

Код должен работать, сейчас я дома и не могу его проверить, извините.

Я бы предпочел решение сценариев, назначение переменных из одного рабочего пространства в другое может привести к проблемам с поддержкой и расширением кода (внезапно создаются переменные, и вы не видите, откуда они берутся). Вот еще несколько примеров того, как динамически обращаться к полям структуры.

Причина в том, что функция вводит свою собственную переменную область видимости.1 Переменные из файла.mat будут загружены в область действия функции, но не в глобальную область.


1. См. Также http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html.

Вы можете изменить свою функцию так, чтобы она выглядела как эта, тогда в вашей родительской (вызывающей) функции вы можете использовать данные в этой выходной переменной

function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');
Другие вопросы по тегам