Ce code brille par sa portabilite inter-systemes. En utilisant la fonction indexc couplee a str(/), la macro recherche simultanement le slash typique des environnements Unix ou SAS Viya et l'antislash specifique a Windows. Ainsi, votre code fonctionnera parfaitement quel que soit le systeme d'exploitation de votre serveur. De plus, l'usage systematique des fonctions macro commencant par Q (qleft, qsysfunc, qsubstr) est indispensable ici : cela masque les potentiels caracteres speciaux presents dans vos noms de dossiers, empechant le processeur de les interpreter a tort comme du code executable.
Type : CREATION_INTERNE
La macro opère sur une chaîne de caractères fournie en paramètre ('pth') et ne lit pas de données issues de tables SASHELP ou de sources externes. Elle manipule des chaînes de caractères en mémoire pour construire le résultat.
| 1 | %macro getFileStem(pth)/des="Extract the path without the file name and extension"; |
| 2 | %local revstr cutstr gotstm; |
| 3 | %let revstr=%qleft(%qsysfunc(reverse(&pth))); |
| 4 | %let cutstr=%qsubstr(&revstr,%qsysfunc(indexc(&revstr,%str(/\)))); |
| 5 | %let gotstm=%qleft(%qsysfunc(reverse(&cutstr))); |
| 6 | %str(&gotstm) |
| 7 | %mend getFileStem; |