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-GAPSangegeben 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-
CONDENSEentfernt führende Leerzeichen und reduziert interne Mehrfach-Leerzeichen zu einem. Nachfolgende Leerzeichen, die Teil des String-Wertes sind, bleiben erhalten. CONDENSE ... NO-GAPSentfernt alle Leerzeichen aus dem String.- Für Strings gibt es oft spezifischere und modernere Alternativen wie
SHIFT ... DELETING LEADING/TRAILING space.,REPLACEoder 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 wegAusgabe:
String Vorher : '{ String mit viel Platz }'String Nachher : '{String mit viel Platz }'String Nach NG : '{StringmitvielPlatz}'Wichtige Hinweise / Best Practice
CONDENSEverändert die übergebene Variable direkt. Sichern Sie den Originalwert vorher, falls er noch benötigt wird.- Der häufigste Irrtum ist die Annahme,
CONDENSEwürde nachfolgende Leerzeichen entfernen. Das ist im Standard * falsch*. NurCONDENSE ... NO-GAPSentfernt 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. CONDENSEist 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.