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            '
È stato utile?

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.
  1. Invertire il NOME
    • SPOSTA LA FUNZIONE INVERSIONE (NOME) AL CAMPO DI LAVORO.
    • CAMPO DI LAVORO ora contiene spazi iniziali, anziché spazi finali.
  2. 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.
  3. Trova la lunghezza del campo FIRST-NAME
    • CALCOLO LUNGHEZZA CAMPO = LUNGHEZZA FUNZIONE (NOME).
  4. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top