Fini les Chemins Tronqués : La Macro SAS Infaillible pour Extraire vos Répertoires

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
Simon

Le Conseil de l'Expert

Simon
Expert SAS et fondateur.

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.

Cette macro prend un chemin de fichier complet en entrée via le paramètre 'pth' et retourne uniquement la partie du chemin qui précède le dernier séparateur de répertoire (slash ou antislash), excluant ainsi le nom du fichier et son extension. Elle est conçue pour la manipulation de chaînes de caractères au sein de l'environnement de macros SAS©.
Analyse des données

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 Bloc de code
MACRO DÉFINITION
Explication :
Ce bloc définit la macro `getFileStem`. Elle utilise les fonctions SAS `reverse` pour inverser la chaîne de chemin, `indexc` pour trouver la position du premier séparateur de répertoire (slash ou antislash, qui correspond au dernier dans la chaîne originale inversée), et `qsubstr` pour extraire la partie pertinente. Le résultat est ensuite réinversé pour obtenir le chemin de base. Les fonctions `qleft` et `qsysfunc` sont utilisées pour gérer les guillemets et exécuter les fonctions SAS en mode macro, assurant la robustesse du traitement des chaînes de caractères.
Copié !
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;
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.