Verketten von Zeichenfolgen unbekannter Länge in COBOL
Frage
Wie verkette ich in COBOL zwei Zeichenfolgen unbekannter Länge?Also zum Beispiel:
WORKING-STORAGE.
FIRST-NAME PIC X(15) VALUE SPACES.
LAST-NAME PIC X(15) VALUE SPACES.
FULL-NAME PIC X(31) VALUE SPACES.
Wenn FIRST-NAME = 'JOHN '
Und LAST-NAME = 'DOE '
, wie bekomme ich:
FULL-NAME = 'JOHN DOE '
im Gegensatz zu:
FULL-NAME = 'JOHN DOE '
Lösung
Ich glaube, das Folgende wird Ihnen das geben, was Sie sich wünschen.
STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
Andere Tipps
Auf den ersten Blick besteht die Lösung darin, mithilfe einer Referenzänderung die beiden Zeichenfolgen einschließlich des Leerzeichens mit einem String zu verknüpfen.Das Problem besteht darin, dass Sie wissen müssen, wie viele nachgestellte Leerzeichen in FIRST-NAME vorhanden sind, sonst erzeugen Sie etwas wie „JOHNbbbbbbbbbbbbDOE“, wobei b ein Leerzeichen ist.
Es gibt keine intrinsische COBOL-Funktion, um die Anzahl der nachgestellten Leerzeichen in einer Zeichenfolge zu bestimmen, aber eine, um die Anzahl der führenden Leerzeichen in einer Zeichenfolge zu bestimmen.Daher besteht meines Erachtens der schnellste Weg darin, den Vornamen umzukehren, die Anzahl der führenden Leerzeichen zu ermitteln und die Referenzänderung zu verwenden, um den Vor- und Nachnamen aneinanderzureihen.
Sie müssen diese Felder zum Arbeitsspeicher hinzufügen:
WORK-FIELD PIC X(15) VALUE SPACES.
TRAILING-SPACES PIC 9(3) VALUE ZERO.
FIELD-LENGTH PIC 9(3) VALUE ZERO.
- Kehren Sie den VORNAMEN um
- VERSCHIEBEN SIE DIE FUNKTION RÜCKWÄRTS (VORNAME) ZUM ARBEITSFELD.
- WORK-FIELD enthält jetzt führende Leerzeichen statt nachfolgender Leerzeichen.
- Ermitteln Sie die Anzahl der nachgestellten Leerzeichen in FIRST-NAME
- ÜBERPRÜFEN SIE DAS ARBEITSFELD UND ZÄHLEN SIE DIE NACHFÄHIGEN RÄUME FÜR FÜHRENDE RÄUME.
- TRAILING-SPACE enthält jetzt die Anzahl der nachgestellten Leerzeichen in FIRST-NAME.
- Ermitteln Sie die Länge des Feldes VORNAME
- FELD-LÄNGE BERECHNEN = FUNKTIONS-LÄNGE (VORNAME).
- Verketten Sie die beiden Zeichenfolgen miteinander.
- STRING VORNAME (1:FIELD-LENGTH – TRAILING-SPACES) „ “ NACHNAME DURCH GRÖSSE BEGRENZT, IN VOLLSTÄNDIGEN NAMEN.
Sie könnten versuchen, eine Schleife zu erstellen, um die tatsächliche Länge zu ermitteln.