[Allegro] Trick 62: Neues Erlebnis aus dem Ergebnis

Bernhard Eversberg ev at biblio.tu-bs.de
Do Dez 20 08:40:36 CET 2007


Trick 62:  Neues Erlebnis aus dem Ergebnis
            Aus einer Erg.Menge eine neue machen


Aufgabe: Schnell mal eben aus einer Ergebnismenge eine andere machen,
          aus Sätzen, die mit denen der Erg.Menge zusammenhängen

Warum: Z.B. hat man eine Ergebnismenge, die aus lauter Bestell-
        datensätzen besteht, oder aus Exemplarsätzen. Was man aber
        gerne hätte in der Situation, das wären die dazugehörigen
        Titeldatensätze!

Lösung:

Man braucht folgende Dinge:
1. Einen Suchbefehl, mit dem man zu jedem Satz der Erg.Menge den
    gewünschten anderen Satz erhält.
    Der Trick dazu ist, den geeigneten Suchbefehl zu basteln und
    dann den Satz mit dem Befehl  f1nd herbeizuholen - denn dabei
    wird die momentane Erg.Menge nicht verändert! Das ist nötig,
    sonst könnte man sie nicht Satz für Satz durcharbeiten.

2. Ein Verfahren, wie man die so gefundenen Datensätze zu einer
    Ergebnismenge machen kann.
    Der Trick dazu ist, daß man zuerst die Satznummern der mit f1nd
    geholten Sätze in eine Datei schreibt und dann diese mit dem
    Befehl  read set ...  in eine Erg.Menge umwandelt!

Eine Komplikation besteht darin, daß es z.B. mehrere Bestellsätze
oder Exemplarsätze zu einem Titelsatz geben kann! In der angestrebten
Erg.Menge der Titelsätze soll es aber keine doppelten Sätze geben.
Der Trick dazu ist, die Erg.Menge der Titelsätze zuerst nach
Satznummern zu sortieren, dann die Nummern in eine Datei auszugeben
und dann diese Datei nochmals mit  read set ...  als Erg.Menge
einzulesen.
Puh! Hört sich schwierig an - viel einfacher geht es aber nicht.
Am besten nimmt man wohl ein ganz konkretes Beispiel und ändert
es an den wenigen Stellen ab, wo es sein muß. Hier ist das Beispiel:
o-titel.flx: (Kommentar ist erweitert, die zu modifizierenden Stellen
sind mit *** markiert)

   --------------------------------------------------------------------
   O-TITEL.FLX : Erg.Menge besteht aus Bestellsaetzen, finde dazu die
   2005-08-23    Titelsaetze und praesentiere als Erg.Menge
                 Es kann zu einem Titel mehrere Bestellungen geben,
                 das wird abgefangen, jeder Titelsatz kommt nur einmal!

if empty mes Keine Erg.Menge;end
first
   *** Spezifische Pruefung ***
   Sind das ueberhaupt Bestellsaetze?
if not #9DA jump sorry
   *** Ende spezifische Pruefung ***

   Hilfsdatei mit den internen Nummern der Titelsaetze zusammenstellen
open x titel.num
   Es muss zuerst eine Ueberschrift rein
wri "bestell" n

   Schleife zur Abarb. d. Bestellsaetze
:bloop
   *** Spezifischer Teil, nur hier muss man eingreifen! ***
   **** hier wird der zugehoerige Satz gesucht. ***
   Bestellsatz enthaelt TitelIdNr in #9DA$T
   Findbefehl fuer den Titelsatz zu der betr. Bestellung anlegen
var "|9 " #9DA$T
   *** Ende des spezifischen Teils ***

   Befehl ausfuehren, d.h. zugeh. Datensatz laden
   (f1nd laedt den Satz, bildet aber keine neue Erg.Menge)
f1nd

   interne Nummer dieses Titelsatzes in die Datei schreiben
write i n
   naechsten Bestellsatz aus der Erg.Menge holen
next
if yes jump bloop
   es gab keinen mehr
close x

   Jetzt Hilfsdatei (Nummernliste!) titel.num als Erg.Menge laden
     Da sind evtl. noch doppelte drin!
read set titel.num
   deshalb erst nach internen Nummern ordnen
order n
   Neue Hilfsdatei aufmachen
open x titel.set
   Ueberschrift rein
wri "Bestellungen" n
   und die Titeldaten-Erg.Menge wieder als Nummernliste speichern.
wri in
close x
   Liste neu einlesen, dabei fliegen Doppelte raus, weil sie direkt
     hintereinander stehen wegen der Ordnung mit "ord n"
read set titel.set
var "Die Erg.Menge besteht jetzt aus den Titeldaten" n "und wird gleich 
gezeigt!"
mes
   Erg.Menge im Kurzlistenfenster zeigen
show list
   Hilfsdateien loeschen
delete titel.num
delete titel.set
end

:sorry
var "Sorry, die aktuelle Ergebnismenge besteht nicht aus Bestelldaten"
mes
end








Mehr Informationen über die Mailingliste Allegro