Blog

La importancia de la conversión en índices alfabéticos

La importancia de la conversión en índices alfabéticos 1Cuando cargamos una lista por un índice de tipo alfabético, el cómo se ordene la lista dependerá directamente de la tabla de caracteres del tipo de campo usado. En este artículo explicaré cómo podemos declarar índices alfabéticos de modo que ordenen una lista sin tener en cuenta mayúsculas, minúsculas ni signos de puntuación.

Para desarrollar este articulo, crearemos un campo de tipo alfa128 y lo llamaremos TITULO. La tabla de caracteres de este tipo de campo incluye letras mayúsculas, minúsculas, acentos, signos de puntuación y números.

Si creamos un índice a partir de este campo (de tipo «acepta repetidas» y como único componente el campo):

La importancia de la conversión en índices alfabéticos 2

Cuando carguemos una tabla por este índice, ésta será ordenada según la tabla de caracteres, esto quiere decir que tendrá en cuenta mayúsculas, minúsculas y signos de puntuación:

La importancia de la conversión en índices alfabéticos 3

¿Cómo podemos hacer que al usar este índice no sean tenidos en cuenta las mayúsculas, minúsculas ni los signos de puntuación?

Podremos lograrlo convirtiendo esa parte del índice a una tabla de caracteres inferior, como por ejemplo:

Alfa 64: Es un tipo alfanumérico que incluye letras mayúsculas, signos de puntuación y números. Este tipo de campo es empaquetado y cada 4 caracteres que el usuario introduzca se comprimen en 3 que serán grabados al disco. El rango máximo del campo es 65532 bytes (87376 caracteres).

Alfa 40: Es un tipo alfanumérico que incluye letras mayúsculas, números, guión y espacio. Este tipo de campo es empaquetado y cada 3 caracteres que el usuario introduzca se comprimen en 2 que serán grabados al disco. El rango máximo del campo es 65534 bytes (98301 caracteres).

Si convirtiésemos esa parte del índice a alfa 64, dado que la tabla de caracteres solamente admite mayúsculas, al cargar una lista por ese índice, ya no se distinguiría entre mayúsculas y minúsculas aunque, dado que la tabla incluye signos de puntuación, sí los tendría en cuenta a la hora de ordenar:

La importancia de la conversión en índices alfabéticos 4

En este caso, dado que se trata de guardar títulos de libros, que pueden incluir signos de puntuación tales como interrogaciones, exclamaciones, etc., nos interesará convertir la parte del índice a alfa40.

Al convertir la parte del índice se indexará el contenido del campo, pero en base a la tabla de caracteres especificadas, es decir, todo en mayúsculas, sin signos de puntuación tales como interrogaciones, exclamaciones, etc.

Para ello lo primero que tenemos que hacer es asignar, en la parte del índice, en la propiedad modo, el valor «campo porción»; es decir, debemos indicar al sistema qué porción del campo se indexará:

La importancia de la conversión en índices alfabéticos 5

El valor a establecer debe ser un múltiplo de la conversión que vayamos a definir. En este caso, dado que vamos a convertir a alfa 40, y en este tipo cada tres caracteres que se introducen en el campo se comprimen en 2 grabados en disco, la longitud a indexar tendrá que ser múltiplo de 2.

En este caso hemos optado por indexar solamente los 12 primeros bytes del campo, por cuestiones de optimización del tamaño del indice. Si quisiésemos indexar una mayor parte del campo, siempre tendríamos que usar un múltiplo de 2, en este caso.

Por último, modificaremos el valor de la propiedad conversión a alfa40.

De este modo, cuando carguemos una lista por este índice, será ordenada sin tener en cuenta signos de puntuación, ni mayúsculas ni minúsculas:

La importancia de la conversión en índices alfabéticos 6

2 thoughts on “La importancia de la conversión en índices alfabéticos

  1. Ahora he comprendido la opción de estas conversiones en V6. Alguna vez he tenido esta necesidad y creé un campo Alfa 40, lo indexé y usaba este índice, por no saber que la conversión del índice ya lo hacía. Ahora me ahorraré un índice y limitaré el número de los primeros caracteres a indexar.

    Gracias.

Dejar un comentario