Entfernen von Zeichen am Ende einer Zeichenkette

Dieser Code ist auch verfügbar auf: English Español Français
Schwierigkeitsgrad
Anfänger
Veröffentlicht am :
Das Makro `mf_trimstr` benötigt zwei Argumente: `basestr` (die zu ändernde Zeichenkette) und `trimstr` (die zu entfernende Zeichenkette). Es bestimmt die Länge beider Zeichenketten und prüft, ob `basestr` lang genug ist. Wenn `trimstr` am Ende von `basestr` gefunden wird, wird es entfernt. Andernfalls wird die ursprüngliche Zeichenkette `basestr` zurückgegeben. Das Makro behandelt auch Fälle, in denen `basestr` und `trimstr` identisch sind oder `basestr` leer ist.
Datenanalyse

Type : CREATION_INTERNE


Das Makro arbeitet ausschließlich mit als Parameter übergebenen Zeichenketten. Es liest oder schreibt keine externen Daten oder SAS-Tabellen. Es verwendet Makrofunktionen zur Zeichenkettenmanipulation.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert das Makro `mf_trimstr`.
1. **Deklaration lokaler Variablen**: `%local baselen trimlen trimval;` deklariert lokale Makrovariablen für die Längen der Zeichenketten und den zu vergleichenden Wert.
2. **Längenprüfung**: Die Längen von `basestr` und `trimstr` werden berechnet. Wenn `basestr` kürzer als `trimstr` oder leer ist, beendet das Makro die Ausführung (`%return`).
3. **Extrahieren der Teilzeichenkette**: Das Makro extrahiert eine Teilzeichenkette von `basestr` mit der gleichen Länge wie `trimstr`, beginnend am Ende von `basestr`. `%superq` wird zur Handhabung von Sonderzeichen verwendet.
4. **Vergleich und Entfernung**:
- Wenn `basestr` identisch mit `trimstr` ist, beendet das Makro die Ausführung (gibt implizit eine leere Zeichenkette zurück).
- Wenn die extrahierte Teilzeichenkette (`trimval`) mit `trimstr` übereinstimmt, wird `trimstr` vom Ende von `basestr` entfernt, indem eine Teilzeichenkette von `basestr` zurückgegeben wird, die `trimstr` ausschließt.
- Andernfalls (keine Übereinstimmung) wird die ursprüngliche `basestr` zurückgegeben.
Kopiert!
1%macro mf_trimstr(basestr,trimstr);
2%local baselen trimlen trimval;
3 
4/* return if basestr is shorter than trimstr (or 0) */
5%let baselen=%LENGTH(%superq(basestr));
6%let trimlen=%LENGTH(%superq(trimstr));
7%IF &baselen < &trimlen or &baselen=0 %THEN %return;
8 
9/* obtain the characters from the end of basestr */
10%let trimval=%qsubstr(%superq(basestr)
11 ,%LENGTH(%superq(basestr))-&trimlen+1
12 ,&trimlen);
13 
14/* compare and if matching, chop it off! */
15%IF %superq(basestr)=%superq(trimstr) %THEN %DO;
16 %return;
17%END;
18%ELSE %IF %superq(trimval)=%superq(trimstr) %THEN %DO;
19 %qsubstr(%superq(basestr),1,%LENGTH(%superq(basestr))-&trimlen)
20%END;
21%ELSE %DO;
22 &basestr
23%END;
24 
25%mend mf_trimstr;
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.

Zugehörige Dokumentation

Aucune documentation spécifique pour cette catégorie.