SORT-Befehl
Sortiert Datensätze der ausgewählten Tabelle und gibt die sortierten Datensätze in eine neue Tabelle aus.
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]
Parameter
TableName
Gibt den Namen der neuen Tabelle an, die die sortierten Datensätze enthalten soll. Visual FoxPro wählt DBF als Dateinamenerweiterung für Tabellen. Wenn Sie einen Dateinamen ohne Erweiterung angeben, wird der Datei automatisch die Erweiterung DBF zugewiesen.ON FieldName1
Gibt das Feld in der ausgewählten Tabelle an, auf dem der Sortiervorgang basieren soll. Inhalt und Datentyp des Feldes legen die Reihenfolge der Datensätze in der neuen Tabelle fest. Standardmäßig wird eine aufsteigende Reihenfolge festgelegt. Eine Sortierung auf der Basis von Memofeldern oder Objektfeldern ist nicht möglich.Im folgenden Beispiel wird eine Tabelle nach dem Feld
cust_id
sortiert. Die Tabellecustomer
wird geöffnet und in eine neue Tabelle namenstemp
sortiert. Die Datensätze der Tabelletemp
werden nach dem Feldcust_id
sortiert.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
Sie können auch zusätzliche Feldnamen (FieldName2, FieldName3) angeben, so dass die neue Tabelle entsprechend sortiert wird. Das erste Feld FieldName1 stellt das Feld dar, nach dem als Erstes sortiert wird, FieldName2 ist das zweite Sortierfeld usw.
[/A | /D] [/C]
Für jedes beim Sortieren angegebene Feld können Sie eine aufsteigende oder absteigende Sortierreihenfolge angeben. /A gibt eine aufsteigende Sortierreihenfolge für das Feld an. /D gibt eine absteigende Reihenfolge an. /A und /D können Sie bei jedem beliebigen Feldtyp angeben.Standardmäßig wird bei der Sortierreihenfolge für Zeichenfelder die Groß- und Kleinschreibung berücksichtigt. Bei Angabe der Option /C hinter dem Namen des Zeichenfeldes wird die Groß- und Kleinschreibung ignoriert. Sie können die Option /C zusammen mit einer der Optionen /A oder /D verwenden. Sie können beispielsweise /AC oder /DC angeben.
Im folgenden Beispiel wird eine neue Tabelle mit dem Namen
clients
erstellt. Die Tabelleorders
wird nach dem Feldorder_date
in aufsteigender und nach dem Feldfreight
in absteigender Reihenfolge sortiert.USE orders SORT TO clients ON order_date/A,freight/D
ASCENDING
Legt für alle Felder, für die nicht /D angegeben wird, eine aufsteigende Sortierreihenfolge fest.DESCENDING
Legt für alle Felder, für die nicht /A angegeben wird, eine absteigende Sortierreihenfolge fest.Wenn Sie weder ASCENDING noch DESCENDING angeben, wird standardmäßig eine aufsteigende Sortierreihenfolge angenommen.
Scope
Gibt einen Datensatzbereich an, der sortiert werden soll. Die Bereichsklauseln sind: ALL, NEXT nRecords, RECORD nRecordNumber und REST.Der Standardbereich für SORT ist ALL(alle Datensätze).
FOR lExpression1
Gibt an, dass nur die Datensätze in der aktuellen Tabelle in den Sortiervorgang einbezogen werden, für die die logische Bedingung lExpression1 den Wert Wahr (.T.) ergibt. Mit FOR können Sie Datensätze nach bestimmten Bedingungen sortieren und unerwünschte Datensätze herausfiltern.Rushmore optimiert einen SORT … FOR-Befehl, wenn es sich bei lExpression1 um einen optimierbaren Ausdruck handelt. Die beste Leistung erreichen Sie, indem Sie in der FOR-Klausel einen optimierbaren Ausdruck verwenden.
Eine Beschreibung der Ausdrücke, die mit Rushmore optimiert werden können, finden Sie unter Optimieren von Anwendungen.
WHILE lExpression2
Gibt eine Bedingung an. Die Datensätze der aktuellen Tabelle werden solange sortiert, wie der logische Ausdruck lExpression2 als Wahr (.T.) ausgewertet wird.FIELDS FieldNameList
Gibt die Felder der Ausgangstabelle an, die in die neue, mit SORT erstellte Tabelle eingefügt werden sollen. Wenn Sie die FIELDS-Klausel nicht angeben, werden alle Felder der Ausgangstabelle in die neue Tabelle übernommen.FIELDS LIKE Skeleton
Gibt an, dass nur die Felder der Ausgangstabelle in die von SORT erstellte Tabelle eingefügt werden, die mit dem Feldmuster Skeleton übereinstimmen.FIELDS EXCEPT Skeleton
Gibt an, dass alle Felder der Ausgangstabelle in die von SORT erstellte Tabelle eingefügt werden, außer denjenigen, die mit dem Feldmuster Skeleton übereinstimmen.Der Feldplatzhalter Skeleton akzeptiert Platzhalter. Um beispielsweise alle Felder, die mit den Buchstaben A und P beginnen, in die neue Tabelle aufzunehmen, verwenden Sie den folgenden Befehl:
SORT TO mytable ON myfield FIELDS LIKE A*,P*
Die LIKE-Klausel kann mit der EXCEPT-Klausel kombiniert werden:
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
NOOPTIMIZE
Deaktiviert die Rushmore-Optimierung von SORT.Weitere Informationen finden Sie unter SET OPTIMIZE und Verwenden von Rushmore zum Beschleunigen des Datenzugriffs.
Hinweise
Die aus der aktuellen Tabelle gewählten Felder bestimmen die Reihenfolge, in der die Datensätze in der neuen Tabelle angezeigt werden.
Vorsicht Bitte achten Sie darauf, dass für die neue Tabelle und die beim Sortiervorgang erstellten temporären Arbeitsdateien genügend Speicherplatz vorhanden ist. Der benötigte Speicherplatz zur Ausführung eines Sortiervorgangs kann das Dreifache der Ausgangsdatei betragen. Mit DISKSPACE( ) und SYS(2020) können Sie den zur Verfügung stehenden Speicherplatz ermitteln. Falls während des Sortiervorgangs nicht genügend Speicherplatz vorhanden ist, zeigt Visual FoxPro eine Fehlermeldung an, und die temporären Arbeitsdateien werden gelöscht.
Felder vom Typ Zeichen, die Zahlen und Leerstellen enthalten, werden nicht immer wie erwartet sortiert. Numerische Felder werden von rechts nach links aufgefüllt, wobei Leerstellen links stehen. Zeichenfelder werden dagegen von links nach rechts aufgefüllt, wobei Leerstellen rechts stehen.
Enthalten beispielsweise zwei Datensätze einer Tabelle ein Zeichenfeld mit der Zahl 1724 in dem einem Datensatz und der Zahl 18 in dem anderen Datensatz, und wird die Tabelle nach diesem Feld in aufsteigender Reihenfolge sortiert, so wird der Datensatz mit der Zahl 1724 vor dem Datensatz mit der Zahl 18 angezeigt. Der Grund hierfür ist, dass Visual FoxPro jedes Zeichen in dem Zeichenfeld von links nach rechts liest. Da 17 (in 1724) kleiner ist als 18 (in 18), wird 1724 vor 18 angezeigt. Um dieses Problem zu vermeiden, setzen Sie vor niedrigere Zahlen stets führende Nullen (0018), oder wandeln Sie das Feld in ein numerisches Feld um.
Siehe auch
COPY FILE | DISKSPACE( ) | INDEX | SYS(2020) - Größe des Standarddatenträgers