Veröffentlicht am :

String-Formatierung mit Trennzeichen und Anführungszeichen

Dieser Code ist auch verfügbar auf: English Español Français
Das Makro `%mf_getquotedstr` nimmt eine Eingabezeichenfolge (`IN_STR`) und wandelt sie in eine neue Zeichenfolge um, wobei jedes Element von Anführungszeichen (einfach, doppelt oder keine) umgeben und durch ein angegebenes Trennzeichen getrennt ist. Die Parameter umfassen:
  • `IN_STR`: Die nicht zitierte Eingabezeichenfolge, getrennt durch Leerzeichen (Standard).
  • `DLM`: Das auf die Ausgabestrings anzuwendende Trennzeichen (Komma als Standard).
  • `QUOTE`: Der Typ der anzuwendenden Anführungszeichen (S für einfach, D für doppelt, N für keine). Jeder andere Wert wird als Anführungszeichen verwendet.
  • `indlm`: Das in der Eingabezeichenfolge verwendete Trennzeichen (Leerzeichen als Standard).
Der Prozess besteht darin, jedes 'Wort' der Eingabezeichenfolge zu durchlaufen, die angegebenen Anführungszeichen anzuwenden, überflüssige Leerzeichen um jedes Wort zu entfernen (`%qtrim`) und dann die neue Zeichenfolge mit dem Ausgabetrennzeichen zusammenzusetzen. Wenn die Eingabezeichenfolge leer ist, gibt sie zwei leere Anführungszeichen zurück (je nach angegebenem Typ).
Datenanalyse

Type : AUCUNE


Das Makro arbeitet ausschließlich mit Zeichenfolgen, die als Parameter übergeben werden. Es greift weder auf SAS-Datasets zu noch erstellt es diese, noch ist es von externen Daten (Dateien, Tabellen) abhängig.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das Makro `%mf_getquotedstr`, das eine Eingabezeichenfolge verarbeitet. Es beginnt damit, das zu verwendende Anführungszeichen zu bestimmen, indem 'S' in ein einfaches Anführungszeichen (`byte(39)`) und 'D' in ein doppeltes Anführungszeichen (`byte(34)`) über `%qsysfunc` umgewandelt wird. Es initialisiert eine lokale Variable `i`, um die Eingabezeichenfolge `IN_STR` mit einer `%do %while`-Schleife und der Funktion `%qscan` zu durchlaufen, um jedes Element gemäß dem Eingabetrennzeichen `indlm` zu extrahieren. Jedes Element wird dann in Anführungszeichen gesetzt und mit `%qtrim` von überflüssigen Leerzeichen bereinigt. Das erste Element initialisiert den `buffer`, die folgenden werden mit dem angegebenen `DLM` hinzugefügt. Schließlich wird `%sysfunc(coalescec())` verwendet, um den Fall zu handhaben, dass die Eingabezeichenfolge leer ist, wobei zwei Anführungszeichen zurückgegeben werden. Das Endergebnis ist die Zeichenfolge `&buffer`.
Kopiert!
1%macro mf_getquotedstr(IN_STR
2 ,DLM=%str(,)
3 ,QUOTE=S
4 ,indlm=%str( )
5)/*/STORE SOURCE*/;
6 /* credit Rowland Hale - byte34 is double quote, 39 is single quote */
7 %IF "e=S %THEN %let quote=%qsysfunc(byte(39));
8 %ELSE %IF "e=D %THEN %let quote=%qsysfunc(byte(34));
9 %ELSE %IF "e=N %THEN %let quote=;
10 %local i item buffer;
11 %let i=1;
12 %DO %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;
13 %let item=%qscan(&IN_STR,&i,%str(&indlm));
14 %IF %bquote("E) ne %THEN %let item="E%qtrim(&item)"E;
15 %ELSE %let item=%qtrim(&item);
16 
17 %IF (&i = 1) %THEN %let buffer =%qtrim(&item);
18 %ELSE %let buffer =&buffer&DLM%qtrim(&item);
19 
20 %let i = %eval(&i+1);
21 %END;
22 
23 %let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));
24 
25 &buffer
26 
27%mend mf_getquotedstr;
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 : Autor: Allan Bowe