SORT (Comando)
Ordena los registros de la tabla seleccionada actualmente y envía los registros ordenados a una tabla nueva.
SORT TO TableNameON FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...] [ASCENDING | DESCENDING]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FIELDS FieldNameList | FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton] [NOOPTIMIZE]
Parámetros
TableName
Especifica el nombre de la nueva tabla que contiene los registros ordenados. Visual FoxPro supone una extensión de archivo .dbf para las tablas. La extensión .dbf se asigna automáticamente si el nombre de archivo incluido no tiene ninguna extensión.ON FieldName1
Especifica el campo de la tabla seleccionada actualmente en el que se basa el orden. El contenido y el tipo de datos del campo determinarán el orden de los registros de la tabla. De forma predeterminada, la ordenación se hará en sentido ascendente. No podrá ordenar por campos de tipo Memo o General.El ejemplo siguiente ordena una tabla por el campo
cust_id
. Se abrecustomer
y se ordena en una tabla nueva llamadatemp
. Los registros detemp
se ordenan por el campocust_id
.CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') USE customer && Opens Customer table CLEAR LIST FIELDS company, cust_id NEXT 3 SORT TO temp ON cust_id USE temp LIST FIELDS company, cust_id NEXT 3 WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT
Puede incluir nombres de campo adicionales (FieldName2, FieldName3) para ordenar aun más la tabla nueva. El primer campo FieldName1 es el campo de ordenación principal, el segundo campo FieldName2 es el campo de ordenación secundario, etc.
[/A | /D] [/C]
Puede especificar un sentido ascendente o descendente para cada uno de los campos que incluya en la ordenación. La opción /A especifica orden ascendente. La opción /D especifica orden descendente. /A o /D pueden incluirse con cualquier tipo de campo.De forma predeterminada, el sentido de ordenación de los campos alfanuméricos distingue entre mayúsculas y minúsculas. Si incluye la opción /C después del nombre de un campo alfanumérico, se pasará por alto la diferencia. Puede combinar la opción /C con la opción /A o /D. Por ejemplo, /AC o /DC.
En el ejemplo siguiente se crea una tabla nueva denominada
clients
. La tablaorders
se ordena según el campoorder_date
en orden ascendente y según el campofreight
en orden descendenteUSE orders SORT TO clients ON order_date/A,freight/D
ASCENDING
Especifica un orden ascendente para todos los campos que no vayan seguidos de la opción /D.DESCENDING
Especifica un orden descendente para todos los campos que no vayan seguidos de la opción /A.Si no incluye ASCENDING o DESCENDING, asumirá el sentido de ordenación predeterminado, que es ascendente.
Scope
Especifica un intervalo de registros que desea ordenar. Las cláusulas de alcance son: ALL, NEXT nRecords, RECORD nRecordNumber y REST.El alcance predeterminado de SORT es ALL (todos los registros).
FOR lExpression1
Especifica que solamente se incluyan en la ordenación los registros de la tabla actual para los que la condición lógica lExpression1 da como resultado verdadero (.T.). Incluir FOR le permite ordenar registros condicionalmente, filtrando los registros no deseados.Si lExpression1 es una opción optimizable, Rushmore optimizará un comando SORT ... FOR. Para obtener el máximo rendimiento, utilice una expresión optimizable en la cláusula FOR.
Encontrará en Optimizar aplicaciones un análisis de las expresiones que se pueden optimizar con Rushmore.
WHILE lExpression2
Especifica una condición según la cual los registros de la tabla actual se incluyen en la ordenación hasta que la expresión lógica lExpression2 los califique como verdaderos (.T.).FIELDS FieldNameList
Especifica los campos procedentes de la tabla original que se van a incluir en la nueva tabla creada por SORT. Si no se incluye la cláusula FIELDS, se incluirán todos los campos de la tabla original en la nueva tabla.FIELDS LIKE Skeleton
Especifica que los campos de la tabla original que coincidan con la estructura de campo Skeleton se incluyan en la nueva tabla creada por SORT.FIELDS EXCEPT Skeleton
Especifica que todos los campos, excepto los que coincidan con la estructura de campo Skeleton se incluyen en la nueva tabla creada por SORT.La estructura de campos Skeleton admite caracteres comodín. Por ejemplo, para especificar que se incluyan en la nueva tabla todos los campos que comienzan por las letras A y P, utilice la instrucción siguiente:
SORT TO mytable ON myfield FIELDS LIKE A*,P*
Puede combinar la cláusula LIKE con la cláusula EXCEPT:
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
NOOPTIMIZE
Desactiva la optimización Rushmore de SORT.Para obtener más información, vea SET OPTIMIZE y Utilizar Rushmore para agilizar el acceso a datos.
Observaciones
El orden en que aparecerán los registros de la nueva tabla está determinado por uno o más campos de la tabla actual.
Precaución Asegúrese de que tiene suficiente espacio en disco para la nueva tabla y para los archivos temporales creados al ordenar. El espacio en disco necesario para realizar una ordenación puede ser, como máximo, tres veces el tamaño de la tabla de origen. La cantidad de espacio disponible en disco puede determinarse con DISKSPACE( ) y SYS(2020). Si agota el espacio del disco durante una ordenación, Visual FoxPro mostrará un mensaje de error y se eliminarán los archivos temporales.
Es posible que los campos de tipo Character que contienen números y espacios no se ordenen en el sentido esperado. Los campos numéricos se llenan de derecha a izquierda, con espacios vacíos a la izquierda. Por el contrario, los campos alfanuméricos se llenan de izquierda a derecha, con espacios vacíos a la derecha.
Por ejemplo, si dos registros de una tabla contienen un campo de tipo Character con el valor 1724 en un registro y el valor 18 en otro, y se ordena la tabla en orden ascendente en este campo, se mostrará el registro que contiene 1724 antes que el registro que contiene 18. Esto se debe a que Visual FoxPro lee cada carácter de los campos de caracteres de izquierda a derecha; como 17 (de 1724) es menor que 18 (de 18), Visual FoxPro coloca 1724 en primer lugar. Para evitar este problema, siempre debe agregar ceros al principio de los números más bajos (0018) o convertir el campo en un campo de tipo Numeric.
Vea también
COPY FILE | DISKSPACE( ) | INDEX | SYS(2020) – Tamaño predeterminado de disco