A instrução SORT no COBOL é utilizada para classificar registros de arquivos ou registros liberados por um procedimento, com base em uma ou mais chaves definidas. Após a ordenação, os registros podem ser processados por um procedimento de saída ou gravados diretamente em arquivos.

📌 Para que serve

  • Classificar registros de arquivos sequenciais conforme campos-chave definidos.

  • Reorganizar dados para facilitar a geração de relatórios ou processamento posterior.

  • Processar registros ordenados via GIVING ou OUTPUT PROCEDURE.

🧾 Sintaxe básica

SORT nome-arquivo-sd
     ON ASCENDING/DESCENDING KEY chave-1 chave-2 ...
     USING arquivo-entrada-1 arquivo-entrada-2 ...
     GIVING arquivo-saida-1 arquivo-saida-2 ...

Ou com procedimentos:

SORT nome-arquivo-sd
     ON ASCENDING KEY chave
     INPUT PROCEDURE IS entrada-thru
     OUTPUT PROCEDURE IS saida-thru

✅ Exemplo prático

SD ARQ-ORDENADO.
  01 REG-ORDENADO.
     05 CODIGO   PIC 9(4).
     05 NOME     PIC X(20).

FD ARQ-ENTRADA.
  01 REG-ENTRADA.
     05 CODIGO   PIC 9(4).
     05 NOME     PIC X(20).

FD ARQ-SAIDA.
  01 REG-SAIDA.
     05 CODIGO   PIC 9(4).
     05 NOME     PIC X(20).

PROCEDURE DIVISION.
    SORT ARQ-ORDENADO
        ON ASCENDING KEY CODIGO
        USING ARQ-ENTRADA
        GIVING ARQ-SAIDA.

⚙️ Como funciona internamente

  • O SORT cria uma área temporária de ordenação (definida por SD) e carrega registros dos arquivos definidos em USING ou via RELEASE.

  • Os dados são ordenados com base nos campos definidos em ASCENDING KEY ou DESCENDING KEY.

  • Após a ordenação:

    • Com GIVING: os registros são automaticamente gravados nos arquivos de saída.

    • Com OUTPUT PROCEDURE: os registros são acessados um a um via RETURN.

⚠️ Regras importantes

  • file-name-1 (na cláusula SORT) deve ser um arquivo especial com entrada SD na DATA DIVISION.

  • Campos definidos como KEY não podem ter OCCURS, nem ser do tipo NATIONAL com ponto flutuante.

  • Os arquivos em USING e GIVING não devem estar abertos no momento do SORT.

  • A sequência de agrupamento (COLLATING SEQUENCE) pode ser personalizada com EBCDIC, ASCII, etc.

  • Procedimentos de entrada (INPUT PROCEDURE) e saída (OUTPUT PROCEDURE) não podem usar SORT, MERGE, RELEASE ou RETURN.

🧠 Dicas práticas

  • Para registros duplicados, use WITH DUPLICATES IN ORDER para preservar a ordem original.

  • Use COLLATING SEQUENCE se for necessário alterar a ordem de agrupamento padrão (ex: EBCDIC para ASCII).

  • INPUT PROCEDURE e OUTPUT PROCEDURE são ideais para lógica de pré e pós-processamento sem criar arquivos intermediários.

  • Ideal para reorganizar grandes volumes de dados de forma performática.

 

✅ Conclusão

A instrução SORT é uma poderosa ferramenta do COBOL que facilita o trabalho com dados organizados. Permite agrupar, classificar e preparar registros para relatórios ou outras rotinas com grande flexibilidade e eficiência. Saber utilizar corretamente as cláusulas USING, GIVING, KEY, COLLATING SEQUENCE e os procedimentos auxiliares amplia significativamente o poder da linguagem no processamento de dados em batch.