COBOL - Comando ACCEPT - www.cadcobol.com.br


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

ACCEPT
Esta declaração torna disponíveis os dados fornecidos pelo sistema operacional ou fornecido diretamente via teclado pelo Usuário.
É provável que o Identifier seja uma variável definida na WORKING-STORAGE SECTION.

A declaração ACCEPT transfere dados para um identificador especificado.
Não há nenhuma verificação de edição ou erro dos dados de entrada.

A declaração ACCEPT tem dois formatos:


Formatos 1

O formato 1 transfere dados de uma fonte de entrada para o item de dados referenciado pelo identificador-1 (a área de recebimento).
Quando a frase FROM é omitida, o dispositivo de entrada do sistema é assumido.

O formato 1 é útil para situações excepcionais em um programa quando a intervenção do operador (para fornecer uma determinada mensagem, código ou indicador de exceção) é necessária.
Obviamente, o operador deve receber as mensagens apropriadas para responder.

identifier-1
A área de recebimento. Pode ser:
  • Um item de grupo alfanumérico
  • Um item de grupo nacional
  • Um item de dados elementar de uso DISPLAY, DISPLAY-1 ou NATIONAL

Um item de grupo nacional é processado como um item de dados elementar da categoria nacional.

mnemonic-name-1
Especifica o dispositivo de entrada.
mnemonic-name-1 deve estar associado no parágrafo SPECIAL-NAMES a um nome de ambiente.
  • Dispositivo de entrada do sistema
    O comprimento de uma transferência de dados é igual ao comprimento do registro no dispositivo de entrada, com um máximo de 32.760 bytes.

    O dispositivo de entrada do sistema é lido até a área de recebimento ser preenchida ou o EOF ser encontrado.
    Se o comprimento da área de recebimento não for um múltiplo uniforme do comprimento do registro do dispositivo de entrada do sistema, o registro final será truncado conforme necessário.
    Se o EOF for encontrado após os dados serem movidos e antes da área de recebimento ser preenchida, a área de recebimento será preenchida com espaços da representação apropriada para a área de recebimento.
    Se o EOF for encontrado antes que qualquer dado seja movido para a área de recebimento, o preenchimento não ocorrerá e o conteúdo da área de recebimento permanecerá inalterado.
    Cada registro de entrada é concatenado com o registro de entrada anterior.

    Se o registro de entrada tiver um formato de comprimento fixo, todo o registro de entrada será usado.
    Nenhuma edição é executada para remover espaços em branco à direita ou à esquerda.

    Se o registro de entrada tiver o formato de tamanho variável, o tamanho real do registro será usado para determinar a quantidade de dados recebidos.
    Com registros de formato variável, a Palavra de Definição de Registro (RDW) é removida do início do registro de entrada.
    Somente os dados de entrada reais são transferidos para o identificador-1 .

    Se o item de dados referenciado pelo identificador-1 for de uso nacional, os dados serão transferidos sem conversão e sem verificação de validade.
    Os dados de entrada são assumidos no formato UTF-16.
  • Console
    1. Um código de mensagem gerado pelo sistema é exibido automaticamente, seguido pelo literal AWAITING REPLY.
      O comprimento máximo de uma mensagem de entrada é de 114 caracteres.
    2. A execução está suspensa.
    3. Depois que o código da mensagem (o mesmo código do item 1) é inserido no console e reconhecido pelo sistema, a execução da instrução ACCEPT é retomada.
      A mensagem é movida para a área de recebimento e justificada à esquerda, independentemente da cláusula PICTURE.
      Se o identificador-1 referenciar um item de dados de uso NACIONAL, a mensagem será convertida da representação da página de códigos nativa para a representação nacional de caracteres.
      A página de código nativa é a especificada pela opção do compilador CODEPAGE quando o código-fonte foi compilado.

      A instrução ACCEPT será encerrada se ocorrer uma das seguintes condições:
      • Nenhum dado é recebido do console; por exemplo, se o operador pressionar a tecla Enter.
      • O item de dados de recebimento é preenchido com dados.
      • Menos de 114 caracteres de dados são inseridos.
      Se 114 bytes de dados forem inseridos e a área de recebimento ainda não estiver preenchida, mais pedidos de dados serão emitidos para o console.

      Se mais de 114 caracteres de dados forem inseridos, apenas os primeiros 114 caracteres serão reconhecidos pelo sistema.

      Se a área de recebimento for maior que a mensagem recebida, os caracteres mais à direita serão preenchidos com espaços da representação apropriada para a área de recebimento.

      Se a mensagem recebida for maior que a área de recebimento, as posições dos caracteres além do comprimento da área de recebimento serão truncadas.
environment-name
Identifica a fonte dos dados de entrada.
Um nome de ambiente dos nomes fornecidos na Tabela 1 pode ser especificado.


Format 2 - DATE, DATE YYYYMMDD, DAY, DAY YYYYDDD, DAY-OF-WEEK, and TIME
Os itens de dados conceituais DATE, DATA, AAAAMMDD, DIA, DIA AAAAMDDD, DAY-OF-WEEK e TIME implicitamente têm USAGE DISPLAY.
Por serem itens de dados conceituais, eles não podem ser descritos no programa COBOL.

O conteúdo dos itens de dados conceituais é movido para a área de recebimento usando as regras da instrução MOVE.
Se a área de recebimento for NATIONAL, os dados serão convertidos em representação de caracteres nacionais.

Identifier-2 - representa o campo receptor.

A área de recepção. Pode ser:

  • Um item de grupo alfanumérico
  • Um item de grupo nacional
  • Um item de dados elementares de uma das seguintes categorias:
    • alfanumérico
    • alfanumérico editado
    • editado numérico (com uso DISPLAY ou NATIONAL)
    • nacional
    • editado nacionalmente
    • numérico
    • ponto flutuante interno
    • ponto flutuante externo (com uso DISPLAY ou NATIONAL)

Um item de grupo nacional é processado como um item de dados elementares da categoria nacional.

O formato 2 acessa a data atual em dois formatos:
o dia da semana ou a hora do dia conforme transportado pelo sistema (que pode ser útil para identificar quando uma determinada execução de um programa objeto foi executada).
Você também pode usar o formato 2 para fornecer a data em cabeçalhos e rodapés.

A data e hora atuais também podem ser acessadas com a função intrínseca CURRENT-DATE, que também suporta valores de ano de quatro dígitos e fornece informações adicionais (consulte CURRENT-DATE).

DATE, DATE YYYYMMDD, DAY, DAY YYYYDDD, DAY-OF-WEEK, and TIME

Os itens de dados conceituais DATE, DATE YYYYMMDD, DAY, DAY YYYYDDD, DAY-OF-WEEK e TIME implicitamente têm USAGE DISPLAY.
Por serem itens de dados conceituais, eles não podem ser descritos no programa COBOL.

O conteúdo dos itens de dados conceituais é movido para a área de recebimento usando as regras da instrução MOVE.
Se a área de recebimento for de uso NACIONAL, os dados são convertidos para representação de caráter nacional.

DATE | A opção DATE obtém a data do sistema
05 WS-YYYYMMDD PIC X(008) | ACCEPT WS-YYMMDD FROM DATE

Possui uma PICTURE 9(6) implícita.
A sequência dos elementos de dados (da esquerda para a direita) é:

  • dois dígitos para o ano
  • dois dígitos para o mês
  • dois dígitos para o dia

Assim, 03 de agosto de 2021 é expresso como 210803.

DATE YYYYMMDD | A opção DATE YYYYMMDD obtém a data do sistema
05 WS-YYYYMMDD PIC X(008) | ACCEPT WS-YYYYMMDD FROM DATE YYYYMMDD

Possui uma PICTURE 9(8) implícita.
A sequência dos elementos de dados (da esquerda para a direita) é:

  • quatro dígitos para o ano
  • dois dígitos para o mês
  • dois dígitos para o dia

Assim, 03 de agosto de 2021 é expresso como 20210803.

DAY | A opção DAY obtém o ano do século e o dia do ano
05 WS-ANO-DIA PIC 9(005) | ACCEPT WS-ANO-DIA FROM DAY

Possui uma PICTURE 9(5) implícita.
A sequência dos elementos de dados (da esquerda para a direita) é:

  • dois dígitos para o ano
  • três dígitos para o dia

Assim, 03 de agosto de 2021 é expresso como 21215.

DAY YYYYDDD | A opção DAY YYYYDDD obtém o ano e o dia do ano
05 WS-YYYYMMDD PIC X(008) | ACCEPT WS-DAY-YYYYDDD FROM DAY YYYYDDD

Possui uma PICTURE 9(7) implícita.
A sequência dos elementos de dados (da esquerda para a direita) é:

  • quatro dígitos para o ano
  • três dígitos para o dia

Assim, 03 de agosto de 2021 é expresso como 2021215.

DAY-OF-WEEK | A opção DAY-OF-WEEK (ANS-85) obtém o dia da semana
05 WS-DIA-SEMANA PIC 9(001) | ACCEPT WS-DIA-SEMANA FROM DAY-OF-WEEK

Possui uma PICTURE 9(1) implícita.
O elemento de dados único representa o dia da semana de acordo com os seguintes valores:

  • O valor 1 representa a segunda-feira
  • O valor 2 representa a terça-feira
  • O valor 3 representa a quarta-feira
  • O valor 4 representa a quinta-feira
  • O valor 5 representa a sexta-feira
  • O valor 6 represetna o sábado
  • O valor 7 representa o domingo.

Assim, terça-feira é expresso como 2.

TIME | A opção TIME obtém a hora sistema
05 WS-HHMMSSCC PIC X(008) | ACCEPT WS-HHMMSSCC FROM TIME ou
05 WS-HHMMSS PIC X(006) | ACCEPT WS-HHMMSS FROM TIME

Possui uma PICTURE 9(8) implícita.

  • dois dígitos por hora do dia
  • dois dígitos por minuto de hora
  • dois dígitos por segundo de minuto
  • dois dígitos por centésimos de segundo

Assim, 14:41 é expresso como 14410000.


Exemplo
Código
IDENTIFICATION DIVISION.
PROGRAM-ID.    ACCEPT.
AUTHOR.        DORNELLES CARLOS ALBERTO. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-CAMPOS-AUXILIARES.
    05 WS-YYYYMMDD           PIC  X(008).
    05 WS-YYMMDD             PIC  X(006).
    05 WS-HHMMSS             PIC  X(006).
    05 WS-HHMMSSCC           PIC  X(008).
    05 WS-DIA-SEMANA         PIC  9(001)..
    05 WS-ANO-DIA            PIC  9(005).
    05 WS-DAY-YYYYDDD        PIC  9(007).

PROCEDURE DIVISION.

     INITIALIZE WS-CAMPOS-AUXILIARES
                REPLACING ALPHANUMERIC BY SPACES
                               NUMERIC BY ZEROES 

     ACCEPT WS-DAY-YYYYDDD FROM DAY YYYYDDD
     ACCEPT WS-YYYYMMDD    FROM DATE YYYYMMDD
     ACCEPT WS-YYMMDD      FROM DATE
     ACCEPT WS-HHMMSS      FROM TIME
     ACCEPT WS-HHMMSSCC    FROM TIME
     ACCEPT WS-DIA-SEMANA  FROM DAY-OF-WEEK
     ACCEPT WS-ANO-DIA     FROM DAY

     DISPLAY "WS-DAY-YYYYDDD - " WS-DAY-YYYYDDD
     DISPLAY "WS-YYYYMMDD    - " WS-YYYYMMDD
     DISPLAY "WS-YYMMDD      - " WS-YYMMDD
     DISPLAY "WS-HHMMSS      - " WS-HHMMSS
     DISPLAY "WS-HHMMSSCC    - " WS-HHMMSSCC
     DISPLAY "WS-DIA-SEMANA  - " WS-DIA-SEMANA
     DISPLAY "WS-ANO-DIA     - " WS-ANO-DIA

     STOP RUN.
Resultado: dados de 03/08/2021
---------------------------------------------------
WS-DAY-YYYYDDD - 2021215
WS-YYYYMMDD    - 20210803
WS-YYMMDD      - 210803
WS-HHMMSS      - 113713
WS-HHMMSSCC    - 11371324
WS-DIA-SEMANA  - 2
WS-ANO-DIA     - 21215
---------------------------------------------------

Veja também