sort MP acon [ab V34.2]
Sortieren im Arbeitsspeicher
M = Modus: a=aufsteigend (A-Z), d=absteigend (Z-A) . Default: a
P = Sortierposition: Das erste Zeichen ist Position 0 . Default: 0
Also: sort a0 ordnet ab dem ersten Zeichen, und zwar aufsteigend.
Mehr zum Sortieren steht in einem eigenen Text .
Geordnet werden mit sort die Zeilen, die in dem Moment in der internen Variablen stehen. Die Zeilen müssen durch die Codes 13 10 getrennt sein. Das ist z.B. dann automatisch der Fall, wenn man mit
var Fdateiname
vorher eine ASCII-Textdatei in die iV eingelesen hat! Wenn man die iV mit var-Befehlen zusammensetzt, kann man die Sondervariable n benutzen, um die Codes 13 10 zwischen die Zeilen zu setzen.
Das Ergebnis, die sortierten Zeilen, liegt danach wieder in der iV, d.h. deren Inhalt wird nicht irgendwo anders hingeschrieben oder ausgegeben, sondern an Ort und Stelle sortiert. Mit sofortigem write kann man aber den Inhalt sofort in die aktuelle Ausgabedatei schreiben und diese dann zeilenweise einlesen.
Wie wird geordnet? Was ist mit Umlauten, Großbuchstaben, ...?
Die Sortierfolge kann man vorher festlegen durch einen Befehl set xab , den man sonst zum Umcodieren von Zeichenfolgen verwendet. Ohne einen solchen Befehl werden die p- oder q-Befehle der Indexparameter benutzt, und zwar diejenigen, die aus dem A ein a machen (bei cat.api sind das die q-Befehle).
Grenze: Die gesamte Datenmenge (= Länge der iV) darf nicht größer als 4 Mio. Byte sein. Was darüber hinausgeht, wird abgeschnitten. Dieser Befehl bietet also eine einfachere Alternative gegenüber dem Sortieren von Dateien, wenn es sich um relativ kleine Datenmengen handelt.
Hinweise
1. Ergebnismengen ordnen kann man mit dem Befehl order .
2. Zum Sortieren von Dateien aller Art gibt es das Programm asort.exe . Die einzige Voraussetzung für dessen Einsatz ist, daß in der zu ordnenden Datei die Einheiten (Zeilen oder Datensätze) durch die Zeichenfolge 13 10 oder nur durch den Code 10 oder den Code 13 getrennt sind und daß eine sortierbare Zeichenfolge in jeder Zeile auf einer festen Position beginnt.
Beispiel:
Im Datenfeld #31s stehen mehrere Schlagwörter, durch "; " getrennt. Man will sie innerhalb des Feldes alphabetisch ordnen.
Das Problem ist, daß man zwischenzeitlich die Zeichenfolge "; " in 13 10 wandeln muß, und wie man auch das Ende des Feldes mit diesen Codes ausstattet, weil das letzte Schlagwort u.U. dann nicht mehr am Ende steht. Genauer dargestellt wurde die Lösung im Trick56 .
Das ist der Aufruf: (statt #31s die gewünschte Nummer einsetzen)
var "#31s"
perf fsort
...
end
Unterprogramm zur Sortierung im Feld:
(in der iV steht die übergebene Kategorienummer)
:fsort
ins $katnr
var
var +"; ||"
ins _; _^M^J_
sort
ins _^M^J_; _
var (e"; ||")
ins $inhalt
var $katnr " " $inhalt
ins
return