Veröffentlicht am :
Makro CREATION_INTERNE

commaparms - Kommas zu Makro-Parametern hinzufügen

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro verarbeitet eine Zeichenkette, die Makroparameter enthält (z.B.: 'param1=val1 param2=val2'), wobei die trennenden Kommas weggelassen wurden. Ziel ist es, zu vermeiden, dass die gesamte Zeichenkette beim Aufruf mit %str() oder %nrstr() geschützt werden muss. Das Makro verwendet einen regulären Ausdruck mit der Funktion PRXCHANGE, um Parameterzuweisungen zu erkennen und ein Komma vor jede einzufügen. Das Ergebnis ist eine korrekt formatierte Parameterzeichenkette (z.B.: ',param1=val1,param2=val2'), wobei das erste Zeichen (das anfängliche Komma) entfernt wird. Das Ergebnis wird unquoted zurückgegeben, damit die Gleichheitszeichen nicht maskiert werden.
Datenanalyse

Type : CREATION_INTERNE


Dieses Makro manipuliert keine Datensätze. Es arbeitet mit einer als Parameter übergebenen Zeichenkette, um diese zu transformieren.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das Makro `%commaparms`. Es nimmt ein Argument `str` entgegen. Die Funktion `%qsysfunc(prxchange(...))` wird verwendet, um eine Substitution basierend auf einem regulären Ausdruck durchzuführen. Der Ausdruck `s·\s*(\w+)\s*=\s*·,\1=·` sucht nach Mustern 'Wort=Wert' (mit optionalen Leerzeichen um das '=' Zeichen) und ersetzt sie durch ',Wort=Wert'. Die Funktion `%qsubstr(..., 2)` entfernt das erste überflüssige Komma. Schließlich sorgt `%unquote` dafür, dass die endgültige Zeichenkette zurückgegeben wird, ohne dass ihre Sonderzeichen (wie '=') maskiert werden, wodurch sie direkt in einem Makroaufruf verwendbar ist.
Kopiert!
1/*
2/ Program : commaparms.sas
3/ Version : 1.0
4/ Author : Roland Rashleigh-Berry
5/ Date : 10-Jun-2014
6/ Purpose : Function-style macro to add back commas between macro parameters
7/ where these have been deliberately omitted in a string.
8/ SubMacros : none
9/ Notes : The result will be returned macro UNQUOTED so that equals signs
10/ are not macro quoted.
11/
12/ Where a controlling macro allows the user to run other macros and
13/ supply parameters values then it is common practice to not use
14/ commas to separate the parameter values and to add these
15/ programatically when the called macro is invoked. This is done to
16/ avoid having to macro quote the whole string due to the presence
17/ of commas. This macro adds back the commas to the parameter list
18/ that are needed when the macro is called.
19/
20/ The macro removes spaces either side of the equals sign and
21/ precedes the parameter name with a comma (removing the very first
22/ comma).
23/
24/ Enclose the string for conversion inside %nrbquote() when calling
25/ this macro otherwise the first parameter name in the string will
26/ be interpreted as a macro parameter of the %commaparms macro.
27/
28/ Usage : %let params=%commaparms(%nrbquote(&str));
29/===============================================================================
30/ PARAMETERS:
31/-------name------- -------------------------description------------------------
32/ str (pos) String
33/===============================================================================
34/ AMENDMENT HISTORY:
35/ init --date-- mod-id ----------------------description------------------------
36/ rrb 25Mar13 New (v1.0)
37/ rrb 10Jun14 Header tidy (v1.0)
38/===============================================================================
39/ This is public domain software. No guarantee as to suitability or accuracy is
40/ given or implied. User uses this code entirely at their own risk.
41/=============================================================================*/
42 
43%put MACRO CALLED: commaparms v1.0;
44 
45%macro commaparms(str);
46%unquote(%qsubstr(%qsysfunc(prxchange(%nrbquote(s·\s*(\w+)\s*=\s*·,\1=·),-1,
47%nrbquote(&str))),2))
48%mend commaparms;
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 : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.