
Ordenar um arquivo para leitura seqüencial.
SORT ON <item>[/A|/D|/C] [[SEEK <chav>= | $=<exp>] | [WHILE|FOR <exp.L>]] [ASCENDING | DESCENDING]
<item> representa o nome do item do arquivo que servirá como chave de ordenação para o arquivo.
/A determina ordenação ascendente para o item (DEFAULT).
/D determina ordenação descendente para o item.
/C determina que letras maiúsculas e minúscula terão o mesmo valor para a ordenação.
SEEK <chav>= | $=<exp> ordena apenas os registros cuja <chav> corresponda ao valor da <exp> (os operadores = e $= funcionam de maneira idêntica ao comando SEEK).
WHILE <exp.L> ordena os registros enquanto estes atenderem a condição <exp.L>.
FOR <exp.L> ordena todos os registros que atendam a condição <exp.L>.
ASCENDING determinam que a ordenação será em ordem ascendente (DEFAULT).
DESCENDING determinam que a ordenação será em ordem descendente.
Quando necessário ordena um arquivo selecionado para um determinado tipo de operação (relatórios, pesquisas ,etc...).
Se mais de um item for utilizado para ordenação basta separá-los com uma "," (vírgula).
O comando SORT ON ordena o arquivo em um arquivo temporário.
Este comando é utilizado para leituras seqüenciais (LOCATE).
A opção SEEK faz com que um número menor de registros participem da ordenação, agilizando este processo.
As opções FOR e WHILE são muito úteis quando se deseja que somente um grupo de registros participem da ordenação.
A cláusula /C pode ser conjugada com as cláusulas /A e /D.
DESCENDING inverte o sentido das ordenações por item (/A e /D).
O exemplo a seguir mostra-nos como ordenar de forma descendente um arquivo.
USE agenda.d
SORT ON numero,nome,ende
LOCATE
DO WHILE FOUND()
? "numero ", numero
? "nome ", nome
? "endereço ", ende
CONTINUE
ENDDO
O exemplo a seguir mostra-nos como ordenar o arquivo anterior, utilizando as cláusulas /A e /D.
Experimente utilizar a opção DESCENDING e note o resultado .
USE agenda.d
SORT ON numero/D,nome/AC,endereco/DC
LOCATE
DO WHILE FOUND()
? "numero ", numero
? "nome ", nome
? "endereço ", ende
CONTINUE
ENDDO
O exemplo a seguir mostra-nos como ordenar apenas os registros que tenham valor da chave cargo = gerente. Experimente utilizar a opção DESCENDING.
DATABASE exemplo 1 a 2
USE lotacao
SORT ON ano.inicio/D,salario/A,nomefun/AC;
SEEK cargo = "gerente"
LOCATE
DO WHILE FOUND()
? "departamento ", nomedep
? "funcionário ", nomefun
? "salario ", salario
?
CONTINUE
ENDDO
$FILES, $OPEN, $TMP, LOCATE, SET PRINT, EOF( ), FLCONTINUE( ).
