concatenazione di stringhe di lunghezza sconosciuta in COBOL
Domanda
Come concatenare insieme due stringhe, di lunghezza sconosciuta, in COBOL?Quindi ad esempio:
WORKING-STORAGE.
FIRST-NAME PIC X(15) VALUE SPACES.
LAST-NAME PIC X(15) VALUE SPACES.
FULL-NAME PIC X(31) VALUE SPACES.
Se FIRST-NAME = 'JOHN '
E LAST-NAME = 'DOE '
, come posso avere:
FULL-NAME = 'JOHN DOE '
al contrario di:
FULL-NAME = 'JOHN DOE '
Soluzione
Credo che quanto segue ti darà ciò che desideri.
STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
Altri suggerimenti
A prima vista, la soluzione è utilizzare la modifica del riferimento a STRING insieme alle due stringhe, compreso lo spazio.Il problema è che devi sapere quanti spazi finali sono presenti in FIRST-NAME, altrimenti produrrai qualcosa come 'JOHNbbbbbbbbbbbbDOE', dove b è uno spazio.
Non esiste una funzione COBOL intrinseca per determinare il numero di spazi finali in una stringa, ma ce n'è una per determinare il numero di spazi iniziali in una stringa.Pertanto, il modo più veloce, per quanto ne so, è invertire il nome, trovare il numero di spazi iniziali e utilizzare la modifica dei riferimenti per mettere insieme il nome e il cognome.
Dovrai aggiungere questi campi alla memoria di lavoro:
WORK-FIELD PIC X(15) VALUE SPACES.
TRAILING-SPACES PIC 9(3) VALUE ZERO.
FIELD-LENGTH PIC 9(3) VALUE ZERO.
- Invertire il NOME
- SPOSTA LA FUNZIONE INVERSIONE (NOME) AL CAMPO DI LAVORO.
- CAMPO DI LAVORO ora contiene spazi iniziali, anziché spazi finali.
- Trova il numero di spazi finali in FIRST-NAME
- ISPEZIONARE GLI SPAZI DI RACCOLTA DEL CONTEGGIO SUL CAMPO DI LAVORO PER GLI SPAZI PRINCIPALI.
- TRAILING-SPACE ora contiene il numero di spazi finali in FIRST-NAME.
- Trova la lunghezza del campo FIRST-NAME
- CALCOLO LUNGHEZZA CAMPO = LUNGHEZZA FUNZIONE (NOME).
- Concatena le due stringhe insieme.
- STRINGA NOME (1:LUNGHEZZA CAMPO – SPAZI FINALI) “ “ COGNOME DELIMITATO PER DIMENSIONE, IN NOME COMPLETO.
Potresti provare a creare un loop per ottenere la lunghezza reale.