Veröffentlicht am :
Makro CREATION_INTERNE

Dateinamen und Pfad aus einem absoluten Pfad extrahieren

Dieser Code ist auch verfügbar auf: Français Deutsch English Español
Dieses SAS©-Makroprogramm, `_getAbsPathComponents`, nimmt einen absoluten Dateipfad (mit '/' als Trennzeichen) als Eingabe. Es identifiziert die Position des letzten Trennzeichens '/', um den Dateinamen vom Rest des Pfades zu isolieren. Zwei Makrovariablen werden als Ausgabe erstellt: eine enthält den Dateinamen und die andere den Pfad des übergeordneten Verzeichnisses. Der Code behandelt Fälle, in denen der Pfad kein Trennzeichen enthält, wobei er dann vollständig als Dateiname betrachtet wird.
Datenanalyse

Type : CREATION_INTERNE


Das Makroprogramm liest keine tabellarischen Daten. Es operiert ausschließlich auf der als Eingabeparameter (`i_absPath`) bereitgestellten Zeichenkette, um Komponenten zu extrahieren.

1 Codeblock
Macro
Erklärung :
Dieser Block definiert das Makro `_getAbsPathComponents`. Es initialisiert zuerst die Ausgabemakrovariablen. Es prüft, ob die Eingabezeichenkette `i_absPath` nicht leer ist. Wenn sie ein Trennzeichen '/' enthält, verwendet es `countw` und `scan`, um das letzte Element (den Dateinamen) zu finden, und `findw` für dessen Startposition. Die Funktion `substr` wird dann verwendet, um den Pfad und den Dateinamen zu extrahieren. Wenn kein Trennzeichen gefunden wird, wird die gesamte Zeichenkette als Dateiname betrachtet.
Kopiert!
1%MACRO _getAbsPathComponents (i_absPath =
2 ,o_fileName =
3 ,o_pathWithoutName =
4 );
5 
6 %LOCAL l_pathElementCount;
7 %LOCAL l_fileNameStartPos;
8 
9 %LET &o_fileName=;
10 %LET &o_pathWithoutName=;
11 
12 %IF "%sysfunc(compress(&i_absPath))" NE "" %THEN %DO; /*if not empty input string*/
13 %IF %sysfunc(index(&i_absPath.,/)) GT 0 %THEN %DO; /*input string contains dir separators*/
14 %LET l_pathElementCount=%sysfunc(countw(&i_absPath.,/));
15 %LET l_fileNameStartPos=%sysfunc(findw(&i_absPath.,%scan(&i_absPath,&l_pathElementCount,/)));
16 %LET &o_pathWithoutName=%sysfunc(substr(&i_absPath.,1,%EVAL(&l_fileNameStartPos. - 2)));
17 %LET &o_fileName = %sysfunc(substr(&i_absPath.,&l_fileNameStartPos.));
18 %END; /*IF %sysfunc(index(&i_absPath.,'/')) GT 0*/
19 %ELSE %DO; /*input string is a filename only*/
20 %LET &o_fileName = &i_absPath;
21 %END;
22 %END; /*IF "%sysfunc(compress(&i_absPath))" NE ""*/
23
24%MEND _getAbsPathComponents;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. This file is part of SASUnit, the Unit testing framework for SAS(R) programs.