2014-03-19 8 views
6

In Matlab, ich habe eine Zeichenfolge, die einen Pfad zu einer Datei enthält:Wie erhält man den Namen des übergeordneten Ordners einer Datei, die durch den vollständigen Pfad angegeben wird?

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

ich jetzt den ‚Dir‘ Teil der Zeichenfolge extrahieren möchten möge. Eine Möglichkeit, dies zu tun ist:

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

Und dann nehmen Sie das fourth Element, und nehmen Sie schließlich das erste Zeichen von ihm (die /).

Ich frage mich nur, ob es eine elegantere Lösung gibt? Es scheint ein wenig umständlich zu sein, alle first ... fifth Elemente explizit zu speichern und dann die / manuell zu entfernen.

Danke.

Antwort

3

Versuchen:

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

Versuchen

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

wie here bei "Split String bei Delimiter Split Schlüsselwort".

1

Wenn Sie sich nicht um die Anzahl der Elemente Ihres Pfades kümmern möchten und nicht strsplit verwenden möchten, was in älteren Versionen von Matlab nicht verfügbar ist, können Sie auch diesen einen Liner verwenden:

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

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

, die immer den übergeordneten Ordner der angegebenen Datei zurückgibt.

Sie sollten auch filesep anstelle von '/' verwenden, um eine bessere Kompatibilität mit verschiedenen Systemen zu erhalten.

0

auch die gute alte Art und Weise ist ...

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-Lösung ist für Fenster gut, aber vielleicht auf Linux/Mac auf den Schrägstrich am Anfang der absoluten Pfade aufgrund fehlschlagen. Mein Vorschlag wäre:

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

das übergeordnete Verzeichnis mit einer einzigen Code-Zeile finden, wenn Sie nicht wissen, wie viele Ordner Schichtung

fliplr (strtok (fliplr (pname), '\')

)
3

können Sie die Funktion fileparts wie folgt versuchen:

[ParentFolderPath] = fileparts('C:/Data/Matlab/Dir/file.m'); 
[~, ParentFolderName] = fileparts(ParentFolderPath) ; 
ParentFolderName = 'Dir' 
Verwandte Themen