Curso de dBASE II
Indexação
Você está em: MarMSX >> Cursos >> dBASE II
Os registros de uma tabela encontram-se normalmente dispostos aleatoriamente, isto é, sem qualquer tipo de ordenação. A numeração do registro indica apenas a ordem de inserção dos registros.
Entretanto, em um dado momento, pode ser necessário a ordenação dos dados em função de algum campo como: nome, idade, salário etc.
Dado que a ordenação de uma tabela em relação a um determinado campo pode ser um processo demorado (no caso de muitos registros), o dBASE II utiliza-se de um recurso para otimizar esse processo: a indexação.
Indexação é o processo de criação de um vetor de índices para os registros de uma tabela, em ordem crescente. No caso do dBASE II, ele cria um novo arquivo no formato ".ndx", contendo os índices e o todo o campo de índice ordenado.
O comando "index on" cria um índice para uma determinada tabela. Sintaxe:
index on <campos> to <nome_indice>
Exemplo de indexação utilizando a tabela alunos, ordenado pelo nome.
. use alunos
. index on nome to alunos
Ao criar o índice, a tabela indexada já entra em uso.
. display all
00004 8437 Alvaro Schwarz 12 M 5
00002 4321 Ana Maria Silva 11 F 5
00005 7193 Beatriz Saraiva 13 F 6
00006 3398 Mauro Pontes 11 M 5
00001 8361 Pablo Goncalves 11 M 5
00010 7766 Paula Tavares 13 F 6
00009 6201 Pedro Borges 11 M 5
00007 9001 Pedro Tavares 13 M 6
00008 6567 Suely Albuquerque 12 F 6
00003 5543 Waldir Moraes 12 M 6
Para abandonar o uso da tabela indexada, pasta dar o comando:
. use alunos
Para retornar o índice:
. set index to alunos
Para mudar uso de tabela já com o índice:
. use alunos index alunos
O Comando find
O comando "find" busca por um resgistro, por meio do campo utilizado na indexação (ordenação). No exemplo anterior, o campo uilizado foi o nome.
O valor da string passada é sem aspas, conforme o exemplo a seguir.
. find Pedro
. display
00009 6201 Pedro Borges 11 M 5
Indexação múltipla
É possível utilizar mais de um campo para criar a indexação. Entretanto, todos os campos deverão ser no formato de caractere. A função str(numero, tamanho, decimal) converte números para caracteres. Ex:
. index on str(idade,2) + nome to aluidx
Salva em um novo índice chamado "aluidx.ndx".
Listando a tabela indexada, onde a ordem é primeiro a idade, depois o nome, temos:
. display all
00002 4321 Ana Maria Silva 11 F 5
00006 3398 Mauro Pontes 11 M 5
00001 8361 Pablo Goncalves 11 M 5
00009 6201 Pedro Borges 11 M 5
00004 8437 Alvaro Schwarz 12 M 5
00008 6567 Suely Albuquerque 12 F 6
00003 5543 Waldir Moraes 12 M 6
00005 7193 Beatriz Saraiva 13 F 6
00010 7766 Paula Tavares 13 F 6
00007 9001 Pedro Tavares 13 M 6
Obs: o comando "reindex" atualiza o índice em uso, caso a tabela original tenha sido alterada.