17 de marzo de 2018

Ordenar

Artículo original: Sorting
http://www.foxpert.com/KnowlBits_200609_4.htm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York


En la mayoría de los lenguajes de programación se encuentran algoritmos de ordenamiento; pero es difícil encontrar la implementación de algoritmos de ordenamiento en Visual FoxPro. Por supuesto, Calvin Hsia tiene algunos en su Blog; pero es muy difícil encontrar otros. La razón más obvia es que Visual FoxPro admite ordenar de forma nativa tanto por índices como por matrices.

Ordenar cadenas mixtas

Si tiene los datos del tipo

1/1A
1/1B
2/A
10/2
10/3

Puede querer ordenar la primera parte numéricamente. Es decir, el orden debe ser 1, 2, 10 y no 1, 10, 2 como ocurriría si Visual FoxPro lo trata como cadena. Al mismo tiempo, sin embargo, desea ordenar la parte restante en orden alfabético. La siguiente expresión de índice lo soluciona:

INDEX ON STR(VAL(field)) + field TAG _Sort

Ordenar con COLLATE

Virtualmente cada aplicación tiene solamente una secuencia COLLATION que utiliza cada vez. La mayoría utiliza MACHINE, seguido por GENERAL, seguido por versiones específicas del país. Sin embargo, a veces necesita ordenar y buscar los datos con orden diferente. Por ejemplo, puede utilizar MACHINE como secuencia collate; pero en algunos casos para ordenar casos independientes (¡esto es sólo un ejemplo!)

Cuando usted crea un índice, Visual FoxPro utiliza la secuencia COLLATE activa o alguna que esté especificada en la cláusula COLLATE. Un detalle conocido es que Visual FoxPro siempre utiliza la secuencia COLLATE que pertenece a un índice cuando Visual FoxPro busca u ordena utilizando los índices. Esto es verdad incluso cuando la aplicación activa una secuencia COLLATE diferente.

Create Cursor curTest (cName C(10))
Insert into curTest Values("Straße")
Set Collate To "GERMAN"
Index on cName Tag cName
Set Collate To "MACHINE"
? Seek("Strasse") && Muestra .T.

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.