Publié le :
Macro CREATION_INTERNE

Extraire le nom de fichier et le chemin d'un chemin absolu

Ce code est également disponible en : Français Deutsch English Español
Ce macro-programme SAS©, `_getAbsPathComponents`, prend en entrée un chemin de fichier absolu (utilisant '/' comme séparateur). Il identifie la position du dernier séparateur '/' pour isoler le nom du fichier du reste du chemin. Deux variables macro sont créées en sortie : une contenant le nom du fichier et l'autre contenant le chemin du répertoire parent. Le code gère les cas où le chemin ne contient pas de séparateur, le considérant alors entièrement comme un nom de fichier.
Analyse des données

Type : CREATION_INTERNE


Le macro-programme ne lit aucune donnée tabulaire. Il opère exclusivement sur la chaîne de caractères fournie en paramètre d'entrée (`i_absPath`) pour en extraire des composants.

1 Bloc de code
Macro
Explication :
Ce bloc définit la macro `_getAbsPathComponents`. Elle initialise d'abord les variables macro de sortie. Elle vérifie si la chaîne d'entrée `i_absPath` n'est pas vide. Si elle contient un séparateur '/', elle utilise `countw` et `scan` pour trouver le dernier élément (le nom du fichier) et `findw` pour sa position de départ. La fonction `substr` est ensuite utilisée pour extraire le chemin et le nom du fichier. Si aucun séparateur n'est trouvé, la chaîne entière est considérée comme le nom du fichier.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : 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.