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


Volta a página anterior

Volta ao Menu Principal


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

SORT
Com frequência, os registros em arquivos devem ser classificados em sequências específicas para atualização, respostas a solicitações ou geração de relatórios.
Um arquivo-mestre de folha de pagamento, por exemplo, pode ser atualizado por ordem do número de Seguridade Social, enquanto os cheques de pagamento produzidos pelo arquivo precisam estar em ordem alfabética.
Classificar ou ordenar, é um rotina comum usada para colocar os registros em uma ordem específica de forma que o processamento sequencial possa ser realizado.
São utilizadas duas técnicas para classificar os arquivos processados por programas COBOL.
Uma é usar um programa utilitário de classificação ou um programa de classificação de um sistema de gerenciamento de banco de dados.
Esses programas de classificação são completamente separados, ou externos, do programa COBOL, e seriam executados em primeiro lugar se os registros precisassem estar em uma sequencia diferente daquela na qual aparecem no arquivo.
Para esses tipos de programas de classificação, voce simplesmente indicaria os campos-chaves pelos quais os registros devem ser ordenados.
Como alternativa, a linguagem COBOL tem o comando SORT, que permite classificar os arquivos como parte de um programa COBOL.


Sort
Os dois códigos principais utilizados na representação de dados em um computador são o EBCDIC (uma abreviação para Extended Binary Coded Decimal Interchange Code), usado principalmente em mainframes, e o ASCII (umaabreviação para American Standard Code for Information Interchange), usado largamente em PCs.

A sequência de caracteres, do menor ao maior, chamada sequência de intercalação, é um tanto diferente no EBCDIC e no ASCII.

Sequência de intercalação do Menor para o Maior

EBCDCI ASCII
Spaces Spaces
Caracteres especiais Caracteres especiais
Letras minúsculas a-z Inteiros 0-9
Letras maiúsculas A-Z Letras maiúsculas A-Z
Inteiros 0-9 Letras minúsculas a-z


Format
  • As declarações desde formato podem aparecer em qualquer lugar na PROCEDURE DIVISION, exceto na parte declarativa.
  • A instrução SORT não é suportada para programas compilados com a opção THREAD.




Detalhamento
file-name-1
O nome fornecido na entrada SD que descreve os registros a serem classificados.

Nenhum par de nomes de arquivos em uma instrução SORT pode ser especificado na mesma cláusula SAME SORT AREA ou na condição SAME SORT-MERGE AREA.
Os nomes de arquivo associados à cláusula GIVING ( file-name-3 , ...) não podem ser especificados na cláusula SAME AREA ; no entanto, eles podem ser associados à mesma cláusula SAME RECORD AREA.

ASCENDING KEY e DESCENDING KEY

Esta frase especifica que os registros devem ser processados na sequência ascendente ou descendente (dependendo da frase especificada), com base nas chaves de classificação especificadas.

data-name-1
Especifica um item de dados KEY no qual a instrução SORT será baseada.
Cada um desses nomes de dados deve identificar um item de dados em uma gravação associada a file-name-1 .
Os nomes de dados que seguem a palavra KEY (chave) são listados da esquerda para a direita na instrução SORT, em ordem de importância decrescente, independentemente de como eles são divididos em frases-chave.

O nome de dados mais à esquerda é a chave principal, o próximo nome de dados é a próxima chave mais significativa, e assim por diante.
Aplicam-se as seguintes regras:
  • Um item de dados KEY específico deve estar fisicamente localizado na mesma posição e ter o mesmo formato de dados em cada arquivo de entrada.
    No entanto, não precisa ter o mesmo nome de dados.
  • Se file-name-1 tiver mais de uma descrição de registro, os itens de dados KEY precisam ser descritos em apenas uma das descrições de registro.
  • Se file-name-1 contiver registros de comprimento variável, todos os itens de dados KEY devem estar contidos nas primeiras posições de caracteres n da gravação, onde n é igual ao tamanho mínimo de registro especificado para o file-name-1 .
  • Os itens de dados KEY não devem conter uma cláusula OCCURS ou estar subordinados a um item que contenha uma cláusula OCCURS.
  • Os itens de dados KEY não podem ser:
    • Variável localizado
    • Itens de grupo que contêm itens de dados de ocorrência variável
    • Categoria numérica descrita com o uso NATIONAL (item decimal nacional)
    • Categoria de ponto flutuante externo descrito com uso NATIONAL (item de ponto flutuante nacional)
    • Categoria DBCS
  • Os itens de dados KEY podem ser qualificados.
  • Os itens de dados KEY podem ser uma das seguintes categorias de dados:
    • Alfabética, alfanumérica, editada alfanumericamente
    • Numérico (exceto numérico com uso NATIONAL)
    • Numérico-editado (com uso DISPLAY ou NATIONAL)
    • Ponto flutuante interno ou exibição de ponto flutuante
    • National ou national editado
  • Os itens de dados principais podem ser campos de data janela, nestas condições:
    • A frase GIVING não deve especificar um arquivo indexado, porque o pedido (binário) assumido ou imposto pelo sistema de arquivos está em conflito com o pedido de data de janela fornecido na saída de classificação.
      A tentativa de escrever a saída de mesclagem de data em janel para um arquivo indexado irá falhar ou reimprimir o pedido de cadastro, dependendo de como o arquivo é acessado (o ACCESS MODE na entrada de controle de arquivo).
    • Se um campo de data de janela alfanumérico for especificado como uma KEY (CHAVE) para uma instrução SORT, a seqüência de agrupamento em vigor para a operação de mesclagem deve ser EBCDIC.
      Assim, a frase COLLATING SEQUENCE da declaração SORT ou, se esta frase não for especificada, então qualquer cláusula PROGRAM COLLATING SEQUENCE no parágrafo OBJECT-COMPUTER, não deve especificar uma seqüência de classificação diferente de EBCDIC ou NATIVE.

    Se a instrução SORT atender a essas condições, a operação de classificação aproveita os recursos do SORT Year 2000, desde que o ambiente de execução inclua um produto de classificação que suporte janelas do século.
    Um campo de data de janelas com um ano e último pode ser especificado como uma declaração KEY for a SORT e pode, assim, explorar a capacidade de janelas do século correspondente do produto de classificação.
    Para obter mais informações sobre o uso de campos de data de janela como itens de dados KEY, consulte Sorting on windowed data fields no Enterprise COBOL Programming Guide.
Se file-name-3 referenciar um arquivo indexado, a primeira especificação de data-name-1 deve estar associada a uma frase ASCENDING e o item de dados referenciado por esse data-name-1 deve ocupar as mesmas posições de personagem neste registro como o item de dados associado à chave de registro principal desse arquivo.

A direção da operação de classificação depende da especificação das palavras-chave ASCENDING ou DESCENDING da seguinte maneira:
  • Quando ASCENDING é especificado, a seqüência é do valor da chave mais baixa para o valor da chave mais alta.
  • Quando DESCENDING é especificado, a seqüência é do valor da chave mais alta para o mais baixo.
  • Se o item de dados KEY for descrito com o uso NATIONAL, a seqüência dos valores KEY é baseada nos valores binários dos caracteres nacionais.
  • Se o item de dados KEY for o ponto flutuante interno, a seqüência dos valores das chaves será na ordem numérica.
  • Quando a frase COLLATING SEQUENCE não é especificada, as comparações de chaves são realizadas de acordo com as regras para comparação de operandos em uma condição de relação. Consulte General relation conditions.
  • Quando a frase COLLATING SEQUENCE é especificada, a seqüência de classificação indicada é usada para itens de dados chave de categorias alfabéticas, alfanuméricas, editadas alfanuméricas, de ponto flutuante e numéricas.
    Para todos os outros itens de dados chave, as comparações são realizadas de acordo com as regras para comparação de operandos em uma condição de relação.
DUPLICATES

Se a frase DUPLICATES for especificada e o conteúdo de todos os elementos-chave associados a uma gravação seja igual aos elementos-chave correspondentes em um ou mais registros, a ordem de retorno desses registros é a seguinte:
  • A ordem dos arquivos de entrada associados conforme especificado na instrução SORT.
    Dentro de um determinado arquivo, a ordem é aquela na qual os registros são acessados a partir desse arquivo.
  • A ordem em que esses registros são liberados por um procedimento de entrada, quando um procedimento de entrada é especificado.
Se a frase DUPLICATES não for especificada, a ordem desses registros é indefinida.
Para obter mais informações sobre o uso da frase DUPLICATES, consulte a discussão relacionada de índices alternativos no Indexing no Enterprise COBOL Programming Guide.

COLLATING SEQUENCE

Esta frase especifica a seqüência de classificação a ser usada em comparações alfanuméricas para os itens de dados KEY nesta operação de classificação.
A frase COLLATING SEQUENCE não tem efeito para as teclas que não são alfabéticas ou alfanuméricas.
alphabet-name-1
Deve ser especificado na cláusula ALPHABET do parágrafo SPECIAL-NAMES .
Alphabet-name-1 pode ser associado a qualquer uma das frases da cláusula ALPHABET, com os seguintes resultados:
STANDARD-1
A sequência de agrupamento ASCII é utilizada para todas as comparações alfanuméricas.
A seqüência de agrupamento ASCII é mostrada nas seqüências de agrupamento EBCDIC e ASCII.
STANDARD-2
A versão de referência internacional do ISO / IEC 646, conjunto de caracteres codificados de 7 bits para intercâmbio de processamento de informações é usado para todas as comparações alfanuméricas.
NATIVE
A sequência de agrupamento EBCDIC é utilizada para todas as comparações alfanuméricas.
A seqüência de agrupamento EBCDIC é mostrada nas seqüências de agrupamento EBCDIC e ASCII.
EBCDIC
A sequência de agrupamento EBCDIC é utilizada para todas as comparações alfanuméricas.
A seqüência de agrupamento EBCDIC é mostrada nas seqüências de agrupamento EBCDIC e ASCII.
literal
A sequência de agrupamento estabelecida pela especificação de literais na cláusula alfabeto-nome é usada para todas as comparações alfanuméricas.
Quando a frase COLLATING SEQUENCE é omitida, a cláusula PROGRAM COLLATING SEQUENCE (se especificado) no parágrafo OBJECT-COMPUTER especifica a seqüência de classificação a ser usada.
Quando a frase COLLATING SEQUENCE e a cláusula PROGRAM COLLATING SEQUENCE são omitidas, a seqüência de agrupamento EBCDIC é usada.

USING

file-name-2 , ...
Os arquivos de entrada.
Quando a frase USING é especificada, todos os registros no file-name-2 , ... (isto é, os arquivos de entrada) são transferidos automaticamente para o file-name-1.
No momento em que a instrução SORT é executada, esses arquivos não devem estar abertos.
O compilador abre, lê, disponibiliza registros e fecha esses arquivos automaticamente.
Se os procedimentos EXCEPTION / ERROR forem especificados para esses arquivos, o compilador faz a ligação necessária a esses procedimentos.

Todos os arquivos de entrada devem ser descritos em entradas FD na divisão de dados.

Se a frase USING for especificada e se file-name-1 contiver registros de comprimento variável, o tamanho dos registros contidos nos arquivos de entrada (nome-arquivo-2 , ...) não deve ser menor do que o menor registro nem maior do que o maior registro descrito para o file-name-1 .
Se file-name-1 contiver registros de comprimento fixo, o tamanho dos registros contidos nos arquivos de entrada não deve ser maior do que o maior registro descrito para o file-name-1.
Para obter mais informações, consulte Describing the input to sorting or merging no Enterprise COBOL Programming Guide.

INPUT PROCEDURE

Esta frase especifica o nome de um procedimento que é selecionar ou modificar registros de entrada antes do início da operação de classificação.
procedure-name-1
Especifica a primeira (ou única) seção ou parágrafo no procedimento de entrada.
procedure-name-2
Identifica a última seção ou parágrafo do procedimento de entrada.
O procedimento de entrada pode consistir em qualquer procedimento necessário para selecionar, modificar ou copiar os registros disponibilizados um por um pela declaração RELEASE ao arquivo referenciado pelo file-name-1.
O intervalo inclui todas as instruções que são executadas como resultado de uma transferência de controle pelas instruções CALL, EXIT, GO TO, PERFORM e XML PARSE no intervalo do procedimento de entrada, bem como todas as instruções em procedimentos declarativos que são executados como um resultado da execução de declarações na faixa do procedimento de entrada.
O intervalo do procedimento de entrada não deve causar a execução de nenhuma declaração MERGE, RETURN ou SORT.

Se um procedimento de entrada for especificado, o controle é passado para o procedimento de entrada antes que o arquivo referenciado por file-name-1 seja sequenciado pela instrução SORT.
O compilador insere um mecanismo de retorno no final da última declaração no procedimento de entrada.
Quando o controle passa a última declaração no procedimento de entrada, os registros que foram liberados para o arquivo referenciado pelo file-name-1 são classificados.

GIVING

file-name-3 , ...
Os arquivos de saída.

Quando a frase GIVING é especificada, todos os registros ordenados em file-name-1 são transferidos automaticamente para os arquivos de saída ( file-name-3 , ...).

Todos os arquivos de saída devem ser descritos em entradas FD na divisão de dados.

Se os arquivos de saída ( file-name-3 , ...) contêm registros de comprimento variável, o tamanho dos registros contidos no file-name-1 não deve ser menor do que o menor registro nem maior do que o maior registro descrito para o arquivos de saída.
Se os arquivos de saída contiverem registros de comprimento fixo, o tamanho dos registros contidos em file-name-1 não deve ser maior do que o maior registro descrito para os arquivos de saída.
Para obter mais informações, consulte Describing the input to sorting or merging no Enterprise COBOL Programming Guide.
No momento em que a instrução SORT é executada, os arquivos de saída ( file-name-3 , ...) não devem estar abertos.
Para cada um dos arquivos de saída, a execução da instrução SORT faz com que as seguintes ações sejam tomadas:
  • O processamento do arquivo é iniciado.
    O início é executado como se uma declaração OPEN com a frase OUTPUT tivesse sido executada.
  • Os registros lógicos ordenados são retornados e escritos no arquivo.
    Cada registro está escrito como se uma instrução WRITE sem frases opcionais tivesse sido executada.

    Para um arquivo relativo, o item de dados da chave relativa para o primeiro registro retornado contém o valor '1';
    Para o segundo registro retornado, o valor '2'.
    Após a execução da instrução SORT, o conteúdo do item de dados da chave relativa indica o último registro retornado ao arquivo.
  • O processamento do arquivo é encerrado. O término é executado como se uma instrução CLOSE sem frases opcionais tivesse sido executada.
Essas funções implícitas são executadas de modo que qualquer procedimento associado ao USE AFTER EXCEPTION/ERROR seja executado; No entanto, a execução de tal procedimento de USE não deve causar a execução de nenhuma declaração manipulando o arquivo referenciado por, ou acessando a área de registro associada a, arquivo-nome-3 .
Na primeira tentativa de escrever para além dos limites definidos externamente do arquivo, qualquer procedimento USE AFTER STANDARD EXCEPTION/ERROR especificado para o arquivo é executado.
Se o controle for retornado desse procedimento de USADO ou se nenhum procedimento USE for especificado, o processamento do arquivo será encerrado.

OUTPUT PROCEDURE

Esta frase especifica o nome de um procedimento que é selecionar ou modificar registros de saída da operação de classificação.

procedure-name-3
Especifica a primeira (ou única) seção ou parágrafo no procedimento de saída.
procedure-name-4
Identifica a última seção ou parágrafo do procedimento de saída.
O procedimento de saída pode consistir em qualquer procedimento necessário para selecionar, modificar ou copiar os registros disponibilizados um por um pela declaração RETURN em ordem ordenada a partir do arquivo referenciado pelo file-name-1 .
O intervalo inclui todas as instruções que são executadas como resultado de uma transferência de controle pelas instruções CALL, EXIT, GO TO, PERFORM e XML PARSE na faixa do procedimento de saída.
O intervalo também inclui todas as declarações em procedimentos declarativos que são executados como resultado da execução de instruções no intervalo do procedimento de saída.
O intervalo do procedimento de saída não deve causar a execução de nenhuma declaração MERGE, RELEASE ou SORT.

Se um procedimento de saída for especificado, o controle passa para ele depois que o arquivo referenciado por file-name-1 foi sequenciado pela instrução SORT.
O compilador insere um mecanismo de retorno no final da última declaração no procedimento de saída e quando o controle passa a última declaração no procedimento de saída, o mecanismo de retorno fornece o término do tipo e depois passa o controle para a próxima declaração executável após o SORT declaração.
Antes de entrar no procedimento de saída, o procedimento de classificação atinge um ponto em que ele pode selecionar a próxima gravação em ordem ordenada quando solicitado.
As instruções RETURN no procedimento de saída são os pedidos para a próxima gravação.

As frases INPUT PROCEDURE e OUTPUT PROCEDURE são semelhantes às de uma declaração básica de PERFORM.
Por exemplo, se você nomear um procedimento em um procedimento de saída, esse procedimento será executado durante a operação de classificação, como se fosse nomeado em uma declaração PERFORM.
Tal como acontece com a instrução PERFORM, a execução do procedimento é encerrada após a última declaração completar a execução.
A última declaração em um procedimento de entrada ou saída pode ser a instrução EXIT (ver declaração EXIT ).