2016-10-25 3 views
0

Я пытаюсь выполнить петлю через папки, определенные переменными, и выбрать один файл, определенный подстановочным знаком (в matlab R2012a). Пример файла: /folder1/folder2/601/mprage/xyz.nii. Изучая это, я попытался включить переменные и подстановочный знак через dir и fullfile, но я получаю ошибку horzcat (преобразование в struct from char невозможно). В конечном счете, файл будет обрабатываться функцией «callpmsegmentation». Я новичок в программировании MatLab ... Вот мой сценарий:вызывающий файл, определяемый переменными и подстановочным знаком

clear all 

studyDir = '/folder1/folder2'; 
anatDir = 'mprage'; 
subjects = {'601', '602', '603'}; 

for jSubj = 1:length(subjects) 
niiname = dir(fullfile(studyDir, subjects{jSubj}, anatDir, '*.nii')); 
nii = [studyDir '/' subjects{jSubj} '/' anatDir '/' niiname]; 
callspmsegmentation(nii); 
end 

Кроме того, я попытался более прямой: (что тоже не работает)

clear all 

studyDir = '/folder1/folder2'; 
anatDir = 'mprage'; 
subjects = {'601', '602', '603'}; 

for jSubj = 1:length(subjects) 
nii = [studyDir '/' subjects{jSubj} '/' anatDir '/*.nii']; 
callspmsegmentation(nii); 
end 
+0

Предоставьте * полное сообщение об ошибке и трассировку стека. – excaza

ответ

1

Выход dir является structне строка, так что вы должны получить доступ к name поле, чтобы получить имя файла

niiname = dir(fullfile(studyDir, subjects{jSubj}, anatDir, '*.nii')); 
nii = [studyDir '/' subjects{jSubj} '/' anatDir '/' niiname.name]; 

Я бы также, вероятно, переписать его для использования fullfile, чтобы вы не жестко кодировали все эти разделители файлов. Что-то вроде этого должно работать.

% Store the folder name 
folder = fullfile(studyDir, subjects{jSubj}, anatDir); 

% Get the file listing 
file = dir(fullfile(folder, '*.nii')); 

% Append the folder to the filename 
nii = fullfile(folder, file.name); 

% Process the file 
callspmsegmentation(nii); 
Смежные вопросы