Sortieren
Mit Hinweisen zum Sortierprogramm  asort   

Es gibt bei der Arbeit mit allegro Situationen, wo Daten sortiert werden müssen. Fünf solche Situationen kann man unterscheiden: 
%=x set db% 
	1.	`Ergebnismenge` 
	2. 	`Grunddateien`    (Typ .xLG) 
	3. 	`Externdateien `  (Typ .xDT, ab V27.2) 
	4. 	`Textdateien  ` 
	5. 	`Interne Daten   `  (FLEX-Befehl  sort ordnet den Inhalt der  "internen Variablen" 

	Anh. 	`Hinweise für FLEX` (Sortieren, Selektieren und/oder Exportieren von Grund- und Externdateien) 

Außer im Fall 1. geschieht das Sortieren stets auf dieselbe Weise: man startet das Programm asort.exe und nennt ihm den Namen der Ausgangsdatei sowie den gewünschten Namen für die sortierte Datei: 

	asort.exe  ausgangsdatei ergebnisdatei [optionen]

Optionen sind nur bei gewissen Sonderwünschen nötig. Folgende Optionen kann man hinten an den Befehl anhängen (getrennt durch Leerzeichen): 
-cp : an einer bestimmten Position p statt beim ersten Zeichen (das wäre -p0) mit dem Ordnen beginnen, 
-r  : umgekehrt sortieren (also absteigend von z nach a) 
-u  : die Kategorien #u1 und #u2 nach dem Sortieren beseitigen (nur im Fall 2.). 
-x  : muß im Fall 3. gesetzt werden 

Zu den Voraussetzungen beim Sortieren 
Grundvoraussetzung 1 für jedes Sortieren ist, daß das Sortierkriterium - sei es ein Name, eine Nummer, ein Titel oder was auch immer - in jedem Datensatz bzw. in jeder Zeile an derselben Zeichenposition beginnt. Datensätze können deshalb nicht unmittelbar z.B. nach dem Schlagwort in #31 sortiert werden, weil die #31 je nach Länge der vorangehenden Datenfelder an ganz verschiedenen Positionen im Datensatz stehen kann. Deshalb muß zuerst eine Grunddatei erstellt werden, die das Schlagwort im Sortierkopf enthält. Oder eine Externdatei, in der über jedem Datensatz das Sortierkriterium als eingerückte Kopfzeile steht. 

Grundvoraussetzung 2 ist, daß das Sortierkriterium aus normierten Zeichen besteht. Damit ist gemeint, daß Buchstaben alle entweder groß oder klein sind, Umlaute und ß aufgelöst, Akzente, Satz- und Sonderzeichen weggelassen. Denn geordnet wird stets Zeichen für Zeichen, und es gilt der ASCII-Code jedes Zeichens, also z.B. 65 für A, 97 für a, 49 für die Ziffer 1, 32 für das Spatium. M.a.W.: Das Programm asort kann nicht selber groß und klein gleichsetzen. Im Fall 1 ist das anders: da macht a99 die Arbeit und hat dafür eine eingebaute Funktion (die sich nicht in asort einbauen läßt). 

Aufruf und Arbeitsweise des Programms asort.exe sind auch im `Kap. 8` des Systemhandbuchs beschrieben. 
Ab V27.2 ist asort ein 32bit-Programm und existiert für Windows und für Linux. 

1. Ergebnismenge ordnen
	Dies ist die einfachste, direkteste Situation, für die kein Hilfsprogramm gebraucht wird: Im Kurzlistenfenster kann man jedes der Kriterien, die in der Kurzliste vorkommen, zum Sortieren verwenden. Wenn man im Kurzlistenfenster F1 drückt oder den Button mit dem Fragezeichen, erscheint ein `Hilfetext`, der in seinem Punkt 1 erklärt, wie es geht. 
Auch per FLEX kann man eine Erg.Menge ordnen lassen, und zwar mit dem Befehl `order`. 
Für diesen Fall wird kein eigenes Programm gebraucht, denn die Sortierfunktion für Ergebnismengen unter Nutzung der Kurzliste ist ein Unterprogramm von a99/alcarta und auch avanti. 
Entscheidend ist, daß die im Kurzlistenfenster hergestellte Ordnung dann auch beim Export der Ergebnismenge mit  export set  beibehalten wird - ansonsten hätte man nicht viel davon! 
Beispiel: vier Zeilen aus einer Ergebnismenge. 
Shakespeare und seine Zeit             ·Baumann, U·1998·AN C 714
Shakespeare in space                   ·Coursen, H·2002·2814-7385
Shakespeare on the German stage        ·Hortmann, ·1998·2783-6121
Herrschergestalten bei Shakespeare     ·Schruff, R·1999·2782-9772
Diese Liste ist nach dem Verfassernamen geordnet, der an der Position 42 steht. Will man die Liste per FLEX umordnen nach dem Titel, gibt man ein:  x ord a0

2. Grunddateien sortieren  
	Wenn man sortierte Listen nach alter Art herstellen will, entstehen dabei sog. Grunddateien. Diese enthalten Datensätze im `Internformat`, aber mit einem Sortierkopf. Das ist ein ganz vorn stehendes Datenfeld mit der Feldbezeichnung #u1, die für jedes Datenschema gilt. Genau beschrieben ist die Sache im `Kap. 6` des Systemhandbuchs. 
Tip: Zum Exportieren der Datensätze im Internformat dient die Parameterdatei i-1.apr. Zum Erstellen einer Grunddatei mit Sortierköpfen wird eine etwas erweiterte Fassung dieser Parameter gebraucht, die vor den Datensatz selbst eben den jeweils richtigen Sortierkopf setzt. Dies leisten für das A-Format die Parameter des Typs s-*.apr, die man als Vorlage für eigene, neue Sortiervorhaben verwenden kann. Im Internformat endet jeder Datensatz mit den Codes 13 und 10, die innerhalb eines Datensatzes nicht vorkommen können 

Beispiel: vier Sätze, verkürzt  (0 und 1 sind die ASCII-Codes 00 und 01.) 
1u1 hortmann020 Shakespeare on the German stage040 Hortmann, Wilhelm075 Cambridge Univ. Pr.076 1998090 2783-61210 
1u1 schruff020 Herrschergestalten bei Shakespeare040 Schruff, Renate075 Niemeyer076 1999090 2782-97720
1u1 baumann020 Shakespeare und seine Zeit040 Baumann, Uwe075 Klett076 1998090 AN C 7140 
1u1 coursen020 Shakespeare in space040 Coursen, Herbert R.075 Lang076 2002090 2814-73850 

Man hängt an den Sortierbefehl die Option -u, dann wird das Feld #u1 nach dem Sortieren wieder beseitigt. Gelegentlich will man eine sortierte Grund- oder Externdatei anschließend noch irgendwie umwandeln lassen. Klassisch leistet dies das Programm SRCH.EXE mit geeigneten Exportparametern. Ab V27.2 gibt es ein Unterprogramm, mit dem man die Aufgabe auch per FLEX lösen kann. Mehr dazu im `Anhang`. 

3. Externdateien sortieren  
	Die sog. `Externdateien` sind erst mit dem Windows-System eingeführt worden. Es handelt sich um Textdateien, die keine nicht druckbaren Steuerzeichen enthalten. Die Datensätze sind durch eine Leerzeile getrennt, die Datenfelder folgen als Zeilen ohne Leerzeilen aufeinander, jedes Feld beginnt am Zeilenanfang mit der Feldnummer, der das # vorangestellt ist. 

Beispiel: dieselben vier Sätze. 
  hortmann 
#20 Shakespeare on the German stage 
#40 Hortmann, Wilhelm ¬<1929->¬ 
#75 Cambridge Univ. Pr. 
#76 1998 
#90 2783-6121 

  schruff 
#20 Herrschergestalten bei Shakespeare 
#40 Schruff, Renate 
#75 Niemeyer 
#76 1999 
#90 2782-9772 

  baumann 
#20 Shakespeare und seine Zeit 
#40 Baumann, Uwe 
#75 Klett 
#76 1998 
#90 AN C 714 

  coursen 
#20 Shakespeare in space : recent Shakespeare productions on screen 
#40 Coursen, Herbert R. 
#75 Lang 
#76 2002 
#90 2814-7385 

4. Textdateien sortieren 
	Dateien mit Zeilenstruktur treten häufig als temporäre Dateien auf, die vor einer Weiterverarbeitung sortiert werden müssen. Solche Sortiervorgänge stecken z.B . in den Methoden zur `Tabellen-` oder `Viewlisten-Produktion`. 
Die Zeilen einer solchen Datei sind durch die Codes 13 und 10 oder nur einen der beiden getrennt. Die Zeilen können von unterschiedlicher Länge sein. 

Anh. Sortieren und Exportieren per FLEX 

A. Sortieren
	Es gibt ein ganz einfaches Rezept, eine Datei aus einem FLEX heraus sortieren zu lassen. 
Sagen wir, der Dateiname steht in #udN, der gewünschte Name für die sortierte Datei steht in #udS. Dann: 

var P "asort.exe " #udN " " #udS 
cAll

Evtl. hängt man noch Optionen an, wie z.B. so, um das rückläufige Sortieren einzuleiten: 

var P "asort.exe " #udN " " #udS " -r" 
cAll

Hinweis: Beim alten asort (bis V27.1) mußte man den Start in einem DOS-Fenster noch mittels "comspec" veranlassen, damit sich das DOS-Fenster wieder schloß. Das sah dann z.B. so aus: 

get env comspec 
ins #uwC 
var #uwC " /c " P "asort.exe " #udN " " #udS -u1" 
cAll
Es ist also nur der blaue Teil noch nötig. 
In neueren FLEXen sieht es manchmal so aus: 

var P "asort asta astas" 
dos 
Hier kann jetzt statt dos auch cAll geschrieben werden - ohne daß man freilich einen Unterschied bemerken würde. 
Solche FLEXe braucht man deshalb nicht zu verändern! 

B. Exportieren
	Wenn eine Grunddatei sortiert wurde, wird man oft dieselbe Datei mit einem Exportvorgang nochmals in eine andere Form bringen wollen. Das ist in klassischen Batchdateien einer der häufigsten Vorgänge und wird mit dem Programm SRCH.EXE erledigt. Dieselbe Aufgabe kann man auch mit FLEX lösen. Es folgt das Rezept. 
Verarbeitung einer Grunddatei  xyz.alg  oder auch einer Externdatei  xyz.adt  mit Selektion per RegEx und Export der zutreffenden Sätze geht so: 
(Wenn Sie Batchdateien und SRCH.EXE  kennen, kommt Ihnen dies bekannt vor. Hinweis: Ab V28.5 gibt es das Konsolprogramm `acon.exe`, mit dem man das alte DOS-Programm SRCH.EXE ersetzen kann, es steht auch unter Linux und Solaris zur Verfügung.) 

var "-d dateiname -E exportdatei -e exportparameter -s suchbegriff" 
   Aufruf des Unterprogramms :expi, Rückkehr: in iV steht evtl. eine Fehlermeldung 
             in iZ steht Zahl der verarb. Saetze 
perf expi 
if Z<1 mes;end 
    In der Datei exportdatei stehen nun die exportierten Sätze - sonst passiert nichts! 
    (wenn exportdatei mit + beginnt, werden die Sätze angehängt) 
    weitere Befehle...  am Ende dann:
include expi.inc 

Tip: In `expi.inc` kann man eigene Befehle einbauen, um jeden Satz vor dem eigentlichen Export nochmals zu verändern. Dies ist kommentiert, die Stelle mit ******* markiert. Für Spezialzwecke macht man sich also eine Spezialversion dieser Datei und bindet diese ein, wenn man die Spezialfunktion braucht. 

?Hilfetext=h he_br 
?order=h xorder 
?Tabellen-=h table 
?Viewlisten-Produktion=h view 
?Kap. 6=h ac6 
?Internformat=h ac0-0=0.2.2  a 
?Kap. 8=h ac8 
?Externdateien=h ac0-0#340 
?Ergebnismenge=h =1. Ergebnis 
?Grunddateien=h =2. Grunddateien 
?Externdateien =h =3. Externdateien 
?Textdateien  =h =4. Textdateien 
?Hinweise für FLEX=h =Anh. Sortieren 
?expi.inc=h expi.inc 
?Anhang=h =B. Exportieren 
?Interne Daten   =h xsort 
?acon.exe=h acon