Есть ли способ получить имя файла и вставить его в сценарий Matlab?

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

Структура папки:

Folder1/analysis.m
Folder1/meas_dynamic_123.dcm
Folder1/meas_123.dcm
Folder1/meas_345.dcm

Мой скрипт (analysis.m) начинается так:

target     =''; <== here should go only the filename that contains 'dynamic'
                    example: meas_dynamic_123.dcm

txt        = dir(target);

// etc

Поэтому мне интересно, есть ли способ запуска analysis.m:

  • автоматически искать папку, в которой он находится,

  • возьмите имя файла, содержащего строку dynamic в имени,

  • вставьте его имя в переменную target

  • продолжить выполнение скрипта

Есть ли у кого-нибудь указания о том, как этого добиться? Используете ffpath?


person pepe    schedule 23.11.2011    source источник


Ответы (3)


ты должен сделать:

f=dir('*dynamic*');
target=f(1).name;
person Oli    schedule 23.11.2011
comment
это работает в командной строке, но когда я помещаю это в сценарий, я получаю сообщение об ошибке Function is not defined for 'struct' inputs. - person pepe; 23.11.2011
comment
Это потому, что вам нужно извлечь только имя файла из структуры, возвращаемой dir. Попробуйте txt=dir('*dynamic*'); txt={txt.name}; - person Doresoom; 23.11.2011

Предположим, вы не находитесь в Folder1 и вам нужно его найти:

script_name = 'analysis';
script_full_path = which(script_name);      % get full path of the script
script_dir = fileparts( script_full_path ); % get the directory of the script
file_list = dir( [script_dir '/*dynamic*']);
name_list = {file_list.name};

name_list будет массивом ячеек, содержащим имена файлов с ключевым словом «динамический».

person YYC    schedule 23.11.2011
comment
спасибо, сохраните это для полного пути, но пока используйте более простой подход от @oli - person pepe; 23.11.2011

Вместо which(scriptname) рассмотрите возможность использования mfilename('fullpath'), который напрямую даст вам полный путь к запущенному m-файлу. Использование which может прерваться, если у вас есть несколько команд с одним и тем же именем, затененных на пути.

person Sam Roberts    schedule 23.11.2011