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