Die CONDENSE
-Anweisung dient dazu, überflüssige Leerzeichen aus einem zeichenartigen Datenobjekt (meistens vom
Typ C
- Zeichenkette fester Länge) zu entfernen. Sie modifiziert den Inhalt der angegebenen Variable direkt an Ort und
Stelle (“in place”).
Konkret führt CONDENSE
im Standardverhalten folgende Aktionen durch:
- Entfernt alle führenden Leerzeichen.
- Ersetzt Folgen von mehreren internen Leerzeichen (Leerzeichen zwischen sichtbaren Zeichen) durch genau ein einzelnes Leerzeichen.
Wichtig: Standardmäßig entfernt CONDENSE
keine nachfolgenden Leerzeichen am Ende der Zeichenkette!
Syntax
CONDENSE <variable> [NO-GAPS].
<variable>
: Der Name der zeichenartigen Variablen (in der Regel TypC
), deren Inhalt kondensiert werden soll.[NO-GAPS]
(Optional): Ein Zusatz, der das Verhalten ändert: WennNO-GAPS
angegeben wird, werden alle Leerzeichen (führende, interne und nachfolgende) restlos aus der Variablen entfernt.
Funktionsweise im Detail
Ohne NO-GAPS
(CONDENSE <variable>.
)
" Hallo Welt "
wird zu"Hallo Welt "
(wenn<variable>
z.B.C(30)
ist. Die nachfolgenden Leerzeichen bis zur Feldlänge bleiben.)" "
wird zu" "
(nur Leerzeichen, wird linksbündig mit Leerzeichen aufgefüllt bis zur Feldlänge)" ABC "
wird zu"ABC "
"A B C"
wird zu"A B C "
Mit NO-GAPS
(CONDENSE <variable> NO-GAPS.
)
" Hallo Welt "
wird zu"HalloWelt "
(Rest mit Leerzeichen aufgefüllt)" "
wird zu" "
(leeres Feld)" ABC "
wird zu"ABC "
"A B C"
wird zu"ABC "
Anwendbarkeit (Typ C vs. STRING)
Typ C (Zeichenkette fester Länge): Dies ist der primäre Anwendungsfall für CONDENSE
. Typ-C-Felder werden nach
Zuweisungen oft rechts mit Leerzeichen aufgefüllt oder können durch Bearbeitung führende/mehrfache interne Leerzeichen
enthalten.
Typ STRING (Zeichenkette variabler Länge): CONDENSE
kann auch auf Strings angewendet werden.
- Das Standard-
CONDENSE
entfernt führende Leerzeichen und reduziert interne Mehrfach-Leerzeichen zu einem. Nachfolgende Leerzeichen, die Teil des String-Wertes sind, bleiben erhalten. CONDENSE ... NO-GAPS
entfernt alle Leerzeichen aus dem String.- Für Strings gibt es oft spezifischere und modernere Alternativen wie
SHIFT ... DELETING LEADING/TRAILING space.
,REPLACE
oder String-Templates/-Funktionen, die mehr Kontrolle bieten.
Beispiele
1. Standard CONDENSE
bei Typ C
DATA text_c TYPE c LENGTH 40 VALUE ' Erster Teil zweiter Teil '.
WRITE: / 'Typ C Vorher :', |'{ text_c }'|.CONDENSE text_c.WRITE: / 'Typ C Nachher :', |'{ text_c }'|.
Ausgabe:
Typ C Vorher : '{ Erster Teil zweiter Teil }'Typ C Nachher : '{Erster Teil zweiter Teil }'
(Führende Leerzeichen weg, interne auf 1 reduziert, nachfolgende Leerzeichen bleiben bis Länge 40 erhalten).
2. CONDENSE
mit NO-GAPS
bei Typ C
DATA text_c_ng TYPE c LENGTH 40 VALUE ' Erster Teil zweiter Teil '.
WRITE: / 'Typ C NG Vorher :', |'{ text_c_ng }'|.CONDENSE text_c_ng NO-GAPS.WRITE: / 'Typ C NG Nachher :', |'{ text_c_ng }'|.
Ausgabe:
Typ C NG Vorher : '{ Erster Teil zweiter Teil }'Typ C NG Nachher : '{ErsterTeilzweiterTeil }'
(Alle Leerzeichen entfernt, der Rest ist linksbündig).
3. CONDENSE
bei Typ STRING
DATA text_s TYPE string VALUE ` String mit viel Platz `.
WRITE: / 'String Vorher :', |'{ text_s }'|.CONDENSE text_s.WRITE: / 'String Nachher :', |'{ text_s }'|. " Führende weg, interne reduziert, nachfolgendes bleibt
DATA text_s_ng TYPE string VALUE ` String mit viel Platz `.CONDENSE text_s_ng NO-GAPS.WRITE: / 'String Nach NG :', |'{ text_s_ng }'|. " Alle Leerzeichen weg
Ausgabe:
String Vorher : '{ String mit viel Platz }'String Nachher : '{String mit viel Platz }'String Nach NG : '{StringmitvielPlatz}'
Wichtige Hinweise / Best Practice
CONDENSE
verändert die übergebene Variable direkt. Sichern Sie den Originalwert vorher, falls er noch benötigt wird.- Der häufigste Irrtum ist die Annahme,
CONDENSE
würde nachfolgende Leerzeichen entfernen. Das ist im Standard * falsch*. NurCONDENSE ... NO-GAPS
entfernt alle Leerzeichen. - Zum Entfernen nur nachfolgender Leerzeichen verwendet man bei Strings
SHIFT <str> RIGHT DELETING TRAILING space.
oder bei Typ C z. B. die Zuweisung an einen String und zurück oder spezielle Funktionsbausteine. CONDENSE
ist nützlich, um Eingabefelder oder Daten aus externen Quellen zu bereinigen, die unerwünschte Leerzeichen enthalten könnten.- Für komplexe String-Manipulationen sind oft modernere String-Funktionen oder Operatoren die bessere Wahl als
CONDENSE
.