2014-03-19 2 views
6

В Matlab, у меня есть строка, содержащая путь к файлу:Как получить имя родительской папки файла, указанного по его полному пути?

path = 'C:/Data/Matlab/Dir/file.m' 

Я хочу теперь хочу извлечь «Dir» часть строки. Один из способов сделать это:

[first, second, third, fourth, fifth] = strtok(path, '/') 

А затем возьмите fourth элемент, и, наконец, удалить первый символ из него (The /).

Мне просто интересно, есть ли более элегантное решение? Кажется немного громоздким, чтобы явно хранить все элементы first ... fifth, а затем вручную удалить /.

Спасибо.

ответ

3

Try:

parts = strsplit(path, '/'); 
DirPart = parts{end-1}; 
4

Попробуйте

s = regexp(path, '/', 'split') 
s(4) 

here, как описано в "Split Строка в Разделитель с помощью разделения слова".

1

Если вы не хотите заботиться о количестве элементов вашего пути, и вы не хотите использовать strsplit, который недоступен в более старых версиях Matlab, вы также можете использовать этот один вкладыш:

directory = getfield(fliplr(regexp(fileparts(path),'/','split')), {1}) 

%% or: 
% alldir = regexp(fileparts(path),'/','split') 
% directory = alldir(end) 

который всегда будет возвращать родительскую папку указанного файла.

Вы должны также рассмотреть возможность использования filesep вместо '/' для лучшей совместимости с различными системами.

0

есть и старый добрый путь ...

n=size(path,2); 

while path(n)~='/'; n=n-1; end 

i=n-2; 

while path(i)~='/'; i=i-1; end 

% result 
path(i+1:n-1) 
0

Max решение хорошо для окон, но, возможно, не на Linux/Mac из-за косую черту в начале абсолютных путей. Мое предложение было бы:

parts = strsplit(path, filesep); 
DirPart = parts{end-1}; 
if path(1) == filesep 
    DirPart = [filesep,DirPart]; 
end 
if path(end) == filesep 
    DirPart = [DirPart,filesep]; 
end 
2

найти родительский каталог с одной строки кода, если вы не знаете, сколько папок отводками

fliplr (strtok (fliplr (PNAME), «\»))

3

вы можете попробовать функцию fileparts следующим образом:

[ParentFolderPath] = fileparts('C:/Data/Matlab/Dir/file.m'); 
[~, ParentFolderName] = fileparts(ParentFolderPath) ; 
ParentFolderName = 'Dir' 
Смежные вопросы