[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