Как контролировать, где функция запускается в MATLAB? - PullRequest
4 голосов
/ 01 февраля 2011

Я хотел бы иметь возможность запускать функцию из каталога, в котором она определена. Допустим, это моя структура папок:

./matlab
./matlab/functions1
./matlab/functions2

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

Допустим, моя функция "func" находится в 'matlab / functions1'. Моя функция содержит команду

csvwrite('data.csv', data(:));

Теперь, если я вызову «func» из ./matlab, «data.csv» будет создан в ./matlab. Если я позвоню из ./matlab/functions2, он будет создан в этом каталоге. Но я бы хотел, чтобы функция всегда записывала data.csv в каталог, где определена функция (./matlab/functions1), независимо от того, какой мой текущий каталог. Как мне этого добиться?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2011

mfilename , вызываемая изнутри функции, возвращает путь и имя функции.

fullPath = mfilename('fullpath');
pathString = fileparts(fullPath);
dataPath = [ pathString filesep 'data.csv'];
csvwrite(dataPath, data(:));
4 голосов
/ 01 февраля 2011

В дополнение к тому, что предложил @zellus, вы можете использовать functions для получения информации о конкретной функции, независимо от того, какой файл m выполняется в один и тот же момент.Вы устанавливаете интересующую функцию, давая functions дескриптор функции:

funInfo = functions(@func);
fullPath = funInfo.file;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...