Има ли начин да получите име на файл и да го вмъкнете в 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
thx ще запази това за пълен път, но засега използва по-прост подход от @oli - person pepe; 23.11.2011

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

person Sam Roberts    schedule 23.11.2011