allegro-CBlueChypV27.2 BlueChyp
Neuer- und Verbesserungen

7. Mai 2007







Mehr zu den Themen:


 

 

 


Sortieren
Mit Hinweisen zum neuen Sortierprogramm von V27.2

Es gibt bei der Arbeit mit allegro Situationen, wo Daten sortiert werden müssen. Vier solche Situationen kann man unterscheiden:
 
    1.     Ergebnismenge 
    2.     Grunddateien     (Typ .xLG)
    3.     Externdateien    (Typ .xDT, ab V27.2)
    4.     Textdateien   

    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 vor ihm stehenden 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. Was dort steht, gilt auch alles für das neue 32bit-Windows-Version des Programms. Ältere Batchdateien oder FLEXe müssen nicht geändert werden, der Umstellungsaufwand von V27.1 zu V27.2 ist Null.


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

2. Grunddateien sortieren  (Dateityp .xLG )
    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  (Dateityp .xDT, ab V27.2 )
    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. Jedem Datensatz kann eine eingerückte Sortierzeile mit beliebigem Inhalt vorangestellt werden, die beim Einlesen in die Datenbank entfällt. Die Ordnung erfolgt dann anhand dieser Sortierzeile.

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.


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)

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.

 

 

 

 

 


http://www.allegro-c.de/bluechyp/



Bernhard Eversberg, UB Braunschweig 2007-05-03



[i] zuletzt aktualisiert:
Email: ub@tu-bs.de