allegro Systemhandbuch V32 

8	Sortieren  

ASORT.EXE ist ein DOS-Programm, d.h. es wird fast immer in Batchdateien eingesetzt, die automatisch gestartet werden. Als Beispiel kann man sich etwa a99-list.bat ansehen oder ct99.bat, die aus dem Exportmenü heraus gestartet werden.  
`h exprt` 

Achtung: Ab V27.2 ist asort.exe ein Windows-Konsolprogramm. Es ist frei von einigen alten Beschränkungen sowie beträchtlich schneller (32bit). Mehr dazu und zum Sortieren von Dateien aus FLEX-Skripten heraus steht in einem `eigenen Text`.
Man erwartet, daß der Rechner in immer neuer Auswahl und Gestaltung geordnete Dateien und Listen hervorbringen kann. Die Produktion einer sortierten Datei oder Liste zerfällt in drei Vorgänge, damit wirklich jede Anforderung erfüllt werden kann. Alle drei Vorgänge läßt man normalerweise über eine Batchdatei automatisch hintereinander ablaufen (-Ø Kap.6). Beispiele sind SR-LIST.BAT, PR-LIST.BAT, QUEX.BAT und RN.BAT. Darin ist das Sortieren enthalten, und man bemerkt es nur an den Zwischenmeldungen. 
Hinweis: Bei den Windows-Programmen kann man Ergebnismengen unmittelbar am Bildschirm sortieren lassen, wobei zum Sortieren jeder Punkt der Kurzanzeige benutzt werden kann: der Titel, der Verfasser, das Jahr etc. Danach kann die Ergebnismenge gleich in der gewählten Reihenfolge exportiert und gedruckt werden. Unter DOS war das nicht möglich. 
Es folgt die Beschreibung, was man tun muß, wenn man ausnahmsweise alle drei Schritte einzeln durchführen will: 

1.	Zuerst wird das Volltext-Suchprogramm SRCH (-Ø Kap.4) oder das Schnellzugriffprogramm PRESTO (-Ø Kap.1) mit Export-Option (-e...) benutzt, um aus den vorhandenen Daten eine "sortierfähige Datei" aufzubereiten. 

	Eine Datei ist sortierfähig, wenn jeder Datensatz 
	 1.	mit einem Sortierbegriff beginnt und 
	 2.	mit den Zeichencodes 13/10 endet ("Carriage Return" und "Line Feed" genannt). 

	Mit Hilfe der Parameterdateien des Typs S-*.APR können die Programme solche Dateien erstellen. Als Sortierbegriff wird dann z.B. die Kombination aus den Kategorien #40 und #20 genommen und in sortierbarer Form an den Anfang jeder Aufnahme geschrieben. Sehen Sie sich dazu die Datei S-PVJ.APR an, die Kommentare darin ermöglichen Ihnen, eine andere Sortierung einzustellen: verändern Sie dazu die nötigen Teile (hauptsächlich die Kategorienummern) mittels Ihres Texteditors. 
	Die Tabelle S.APT, die von den S-*.APR-Dateien automatisch nachgeladen wird, enthält die Vorschriften für die Zeichenumwandlung (Klein-/Großbuchstaben, Umlautauflösung, Sonderzeichen weglassen etc.). Auch diese Tabelle können Sie verändern, sie ist kommentiert. 

	Hat man jedoch, als Sonderfall, in die Kategorie #00 jedes Datensatzes ein sortierfähiges Kriterium von vornherein selbst eingegeben, und will man nun dieses und kein anderes zum Sortieren benutzen, dann nimmt man die Parameterdatei I-1.APR zum Erstellen der Sortierdatei.  

2.	Vom CockPit-Menü "Funktionen" aus ruft man mit Ziffer 8 das Sortierprogramm auf. Man wird gefragt 
	  •	auf welchem Laufwerk die zu sortierende Datei ist; 
		es kommt dann die Liste der auf dem Laufwerk stehenden Dateien, so daß man auf die übliche Art (durch Setzen eines '+') die gewünschte Datei markieren kann, 
	  •	wohin die sortierte Datei zu schreiben ist und wie sie heißen soll. Wenn auf dem Ziellaufwerk nicht mindestens die doppelte Größe der Sortierdatei frei ist, sucht das Programm nach einem anderen Laufwerk mit genügend Platz. Wenn keines zu finden ist, kommt eine entsprechende Nachricht, und ASORT tut erst einmal nichts. Schaffen Sie Platz, und zwar mindestens doppelt so viel, wie die zu sortierende Datei beansprucht. 

	Nach diesen Vorbereitungen wird die eigentliche Sortierarbeit erledigt. Einige Zwischenmeldungen informieren Sie über den Fortgang des Prozesses. 

3.	Nach getaner Arbeit erscheint wieder das CockPit. Wenn die sortierte Datei nun gedruckt oder mit anderen Parametern exportiert werden soll, wählt man Funktion 6 ("Export", -f 6) und dort die geeignete Parameterdatei für die Produktion.

Eine Anmerkung zum Sortieren von Zahlen: korrekte Sortierung von Zahlenwerten erfordert, daß die Ziffern spaltenrichtig mit führenden Nullen eingegeben wurden. Es wird Zeichen für Zeichen von links nach rechts sortiert, daher können Zahlen mit unterschiedlicher Stellenzahl nicht automatisch nach ihrem Zahlenwert geordnet werden. Mit einem Manipulationsbefehl wie z.B.  r7,0  kann man jedoch beim Exportieren erreichen, daß Zahlen für einen Sortierkopf korrekt aufbereitet werden (--> 10.2.6.3). Ziffern ordnen ansonsten vor Buchstaben. 
	In Kap. 10.4.2 ist der Prototyp einer Parameterdatei abgedruckt, die allegro-Daten zum Sortieren vorbereitet. Sie können diese Datei, S-0.APR, als Muster für eigene Sortierproduktionen nehmen. 
Nach dem Sortieren einer .ALG-Datei folgt in den meisten Fällen ein weiterer Durchlauf des Programms SRCH, um die ALG-Datei in eine andere Form zu bringen, etwa eine Textdatei.

Aufruf des Programms in Stapeldateien
Das Programm ASORT läßt sich, wie die anderen Programme, in einer Stapeldatei einsetzen. D.h. man kann es so aufrufen, daß es automatisch abläuft ohne noch eine Frage zu stellen. Dies ist wichtig, wenn man das Programm in größere Abläufe einbauen will. In den schon genannten Batchdateien (SR-LIST.BAT usw.) kann man sich anschauen, wie so etwas gemacht wird. 
Der einfachste Fall (der Normalfall) sieht so aus, daß eine Datei namens xyz vorliegt und durch Sortierung daraus eine Datei namens abc entstehen soll. Dann genügt der Befehl 
asort xyz abc
wobei die Namen wie üblich mit Pfadangabe zu geben sind, wenn die Dateien nicht auf dem aktuellen Pfad liegen. Ein Beispiel: 
asort uuu.alg sss.alg
Damit ASORT flexibel einsetzbar wird, gibt es noch ein paar Feinheiten. Es kann beim Aufruf die folgenden Optionen auswerten: 
 •	zwei Dateinamen: Eingabe- und Ausgabedatei, in genau dieser Reihenfolge. 
	Man kann die Namen ohne '-' angeben, jedoch sind auch -i eingabedatei und -o ausgabedatei möglich ('i' für Input, 'o' für Output). 
 •	-d muster : alle mit dem muster übereinstimmenden Dateinamen werden zum Sortieren angeboten, man wählt auf die übliche Art (Markieren mit einem '+') die zu sortierende Datei aus. 
 •	eine Positionsangabe für den Beginn des Sortierbegriffs. Diese wird mit 
	-c pos       ( 'c'  steht für "column", default: -c0 )
	angegeben (die Zählung beginnt mit 0 für das erste Zeichen). Ohne -c beginnt der Vergleich beim ersten Zeichen. Meistens ist das in Ordnung, auch wenn zuerst eine immer gleiche Kategorienummer kommt, denn die wirkt sich auf die Sortierung dann ohnehin nicht aus. -c muß also nur angegeben werden, wenn vor dem Sortierbegriff eine feste Anzahl von Zeichen steht, die unterschiedliche Werte haben können. Die Länge des Sortierbegriffs ist nicht begrenzt (kann auch länger als 256 Zeichen sein).
 •	-u1/2  :  wenn die Kategorien #u1 oder #u1 und #u2 nach dem Sortieren zu beseitigen sind. 
	Mit -u3 wird auch noch der Code 1 am Satzanfang beseitigt und #u2 in eine reine Textzeile verwandelt. 
•	-r  schaltet die Rückwärts-Sortierung ein (also absteigend von 9 nach 0 und von z nach a)
•	-x1  schaltet den .adt-Modus ein

Allgemeine Form: 

   asort [laufw:][pfad\]eingabedatei [laufw:][pfad\]ausgabedatei [-c pos] [-u1,2,3] [-r]

Ein solcher Befehl kann auch direkt mit der Hand eingegeben werden, um eine Datei ad hoc zu sortieren. 
Die Option  -x1  am Schluß bedeutet, daß Ein- und Ausgabedateien vom Typ .adt sind (im sog. Externformat, s. Kap.2).

Anmerkung für DOS- und UNIX-Kenner
Mit ASORT kann man auch andere Dateien sortieren, wenn die zu ordnenden Einheiten (Datensätze) durch die Kombination 13 10 (hex. 0Dh 0Ah, auch "Carriage Return / Line Feed" genannt) getrennt sind. Das ist die einzige Voraussetzung - die Datensätze können ansonsten von beliebiger Länge sein. Das Programm bildet Portionen von gut 1MB Größe und sortiert diese zunächst vor. Dann werden jeweils 4 dieser Portionen zu einer Datei zusammengemischt. Das setzt sich fort, bis schließlich nur noch eine Datei übrig ist. Das ist dann die Ergebnisdatei. ASORT prüft auch, bevor es beginnt, ob genügend Platz auf dem aktuellen Laufwerk ist. Wenn nicht, sieht es sich die anderen Laufwerke an und nimmt bei Erfolg ein anderes für die Zwischendateien. (ASORT wurde geschrieben, weil das SORT von MS-DOS nur Dateien bis 64K und Sätze bis 255 Zeichen sortieren kann. ASORT schafft 640 MB und Sätze bis 32K. Oder anders ausgedrückt: 8 Millionen Sätze mit durchnittlich 80 Byte.) 
Unter UNIX gibt es bessere Sortierprogramme, z.B. gsort (GNU-sort), daher wird ASORT nicht fuer UNIX gebraucht. Einzig die Option -u haben andere Programme nicht. Das Programm gsort.exe gibt es auch für DOS. Es ist auf dem FTP-Server und auf der CD-ROM von V15 (Verzeichnis \programm\util) zu finden. Man startet es mit  gsort <Eingabedatei >Ausgabedatei. 
gsort kennt noch weitere Optionen, die ASORT nicht bietet:  -f  zum Ignorieren des groß-/klein-Unterschiedes, Sortieren nach bestimmten Feldern, oder das Eliminieren von Sätzen mit gleichem Sortierfeld. 
Unter UNIX liefert der Befehl  man sort  oder  man gsort die Dokumentation zum Programm. Probleme kann es mit dem Feldende-Code 0 geben.
Mit allegro können nur Export-Experten solcherlei Leistungen realisieren, indem sie geeignete Sortierfelder per Export produzieren. 
Tip: Wenn man z.B. absteigend nach Erscheinungsjahr sortieren will, kann man auch im Sortierfeld das Jahr als komplementäre Zahl codieren:  #76 b3 x"*1" x"-10000" f"-" e"."  (b3, wenn ks=1 ist). Die Jahreszahl wird also von 10000 subtrahiert, dadurch kehrt sich dann die Ordnung um.

?h exprt=h exprt 
?eigenen Text=h sort