COBOL - String Statement
A instrução STRING agrupa o conteúdo parcial ou completo de dois ou mais itens de dados ou literais em um único item de dados. Uma instrução STRING pode ser escrita em vez de uma série de instruções MOVE.
A instrução STRING é usada para concatenar itens não numéricos. Qualquer número de itens pode ser concatenado. Strings inteiras ou parciais podem ser concatenadas. Para usar a string inteira, delimite-a por tamanho. Para usar apenas uma parte de uma string, delimite-a por qualquer caractere que indique o final dos dados que você deseja concatenar.
Sintaxe:
STRING identifier-1 or literal-1
DELIMITED BY identifier-2 or literal-2 or SIZE
INTO identifier-3
[WITH POINTER identifier-4]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imperative-statement-2]
END-STRING
|
identificador-1, literal-1 - Representa os campos de envio.
DELIMITED BY - Define os limites da string. Um delimitador para cada conjunto de campos de envio que, se encontrados, faz com que esses campos de envio parem de ser transferidos (DELIMITED BY frase)
- identificador-2 , literal-2 - É usado como delimitador; ou seja, caracteres que delimitam os dados a serem transferidos.
- TAMANHO - Transfere toda a área de envio.
EM - Identifica o campo de recebimento (ou seja,
identificador-3 - Representa o campo de recebimento).
POINTER - (Opcional) Um item de dados inteiro que indica a posição do caractere mais à esquerda no campo de recebimento para o qual os dados devem ser transferidos (frase COM POINTER).
identifier-4 - (Opcional) Um item de dados inteiro que indica a posição do caractere mais à esquerda no campo de recebimento para o qual os dados devem ser transferidos (frase COM POINTER).
ON OVERFLOW - (Opcional) Ação a ser tomada se o campo de recebimento for preenchido antes que todos os dados de envio tenham sido processados (frase ON OVERFLOW).
END-STRING - Esse terminador de escopo explícito serve para delimitar o escopo da instrução STRING.
STRING Regras:
- Os campos de recebimento não devem ser:
- Campo editado
- Com Cláusula Justificada
- Com modificação de referência
- A variável ponteiro deve ser:
- Elementar e Numérico
- Grande o suficiente para manter o comprimento máximo do campo de recepção
- ON OVERFLOW executado quando o ponteiro Valor <= ou excede o comprimento máximo do campo de recebimento
Exemplo 1:
Ao executarmos a instrução STRING abaixo, os resultados obtidos serão semelhantes aos ilustrados na figura após a instrução.
STRING ID-1 ID-2 DELIMITED BY ID-3
ID-4 ID-5 DELIMITED BY SIZE
INTO ID-7 WITH POINTER ID-8
END-STRING |
Exemplo 2:
........
FILE SECTION.
01 RCD-01.
05 CUST-INFO.
10 CUST-NAME PIC X(15).
10 CUST-ADDR PIC X(35).
05 BILL-INFO.
10 INV-NO PIC X(6).
10 INV-AMT PIC $$,$$$.99.
10 AMT-PAID PIC $$,$$$.99.
10 DATE-PAID PIC X(8).
10 BAL-DUE PIC $$,$$$.99.
10 DATE-DUE PIC X(8).
........
WORKING-STORAGE SECTION.
77 RPT-LINE PIC X(120).
77 LINE-POS PIC S9(3).
77 LINE-NO PIC 9(5) VALUE 1.
77 DEC-POINT PIC X VALUE ".".
-----
PROCEDURE DIVISION.
.......
MOVE SPACES TO RPT-LINE.
MOVE 4 TO LINE-POS.
STRING
LINE-NO SPACE CUST-INFO INV-NO SPACE DATE-DUE SPACE
DELIMITED BY SIZE
BAL-DUE
DELIMITED BY DEC-POINT
INTO RPT-LINE
WITH POINTER LINE-POS
END-STRING.
-------
STOP RUN.
|
STRING resultados:
Consideremos que o registro RCD-01 contém as seguintes informações (o símbolo b indica um espaço em branco):
J.B.bSMITHbbbbb
444bSPRINGbST.,bCHICAGO,bILL.bbbbbb
A14275
$4,736.85
$2,400.00
09/22/76
$2,336.85
10/22/76
|
Quando a instrução STRING é executada, os itens são movidos para RPT-LINE conforme mostrado na tabela abaixo.
Item | Positions | Data |
LINE-NO | 4 - 8 | 00001 |
Space | 9 | b |
CUST-INFO | 10 - 59 | 444bSPRINGbST.,bCHICAGO,bILL.bbbbbb |
INV-NO | 60 - 65 | A14275 |
Space | 66 | b |
DATE-DUE | 67 - 74 | 09/22/76 |
Space | 75 | b |
Portion of BAL-DUE that precedes the decimal point | 76 - 81 | $2,336.85 |
Após a execução da instrução STRING, o valor de LINE-POS é 82 e RPT-LINE possui os valores,
column 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
value 00001 J.B. SMITH ST., CHICAGO, ILL. A14275 10/22/76 $2,336
|