la concatenazione unknown-stringhe di lunghezza in COBOL

Come faccio a concatenare due stringhe, di lunghezza sconosciuta, in COBOL? Così, per 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 ottenere:

FULL-NAME = 'JOHN DOE                       '

anziché:

FULL-NAME = 'JOHN            DOE            '
il punto b per mostrare spazi è così che possiamo contare l’accusato cose. Perché li avete cambiati?
Avete bisogno di contare sapere che il pad ogni stringa di 15 caratteri? (Ci può essere anche una differenza in COBOL tra 'foo' e 'foo '?)

OriginaleL’autore Eric H | 2008-09-05

2 Replies
  1. 4

    Credo che il seguente vi darà ciò che si desidera.

    STRING
    FIRST-NAME DELIMITED BY " ",
    " ",
    LAST-NAME DELIMITED BY SIZE
    INTO FULL-NAME.
    

    OriginaleL’autore Thayne

  2. 3

    A prima vista, la soluzione è usare riferimento modifica STRINGA insieme le due stringhe, compreso lo spazio. Il problema è che è necessario sapere quanti spazi sono presenti nel NOME, altrimenti ti produrre qualcosa di simile a ‘JOHNbbbbbbbbbbbbDOE’, dove b è uno spazio.

    Non c’è intrinseca COBOL funzione per determinare il numero di spazi in una stringa, ma c’è di determinare il numero di grandi spazi in una stringa. Pertanto, il modo più veloce, per quanto posso dire, è di invertire il primo nome, trovare il numero di grandi spazi e di riferimento di modifica stringa insieme i nomi e i cognomi.

    Dovrete aggiungere questi campi di lavoro di archiviazione:

    WORK-FIELD        PIC X(15) VALUE SPACES.
    TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
    FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
    
    1. Invertire il PRIMO NOME
      • SPOSTARE FUNZIONE INVERSA (PRIMO NOME).
      • LAVORO-CAMPO contiene gli spazi principali, invece di spazi finali.
    2. Trovare il numero di spazi nel NOME
      • ISPEZIONARE IL LAVORO-CAMPO DI CONTEGGIO FINALE-SPAZI PER GLI SPAZI PRINCIPALI.
      • FINALE-SPAZIO, che ora contiene il numero di spazi nel NOME.
    3. Trovare la lunghezza del campo relativo al cognome
      • CALCOLARE IL CAMPO DI LUNGHEZZA = FUNZIONE LUNGHEZZA (PRIMO NOME).
    4. Concatenare due stringhe.
      • STRING NOME (1:CAMPO DI LUNGHEZZA – TRAILING-SPAZI) “ “ LAST-NAME DELIMITATO DALLE DIMENSIONI, IN NOME DI.
    “più veloce” è uno strano modo di descrivere, ma almeno ci si occupa spazi correttamente.

    OriginaleL’autore Eric H

Lascia un commento