Trick 62: Neues
Erlebnis mit dem Ergebnis
Aus der aktuellen
Erg.Menge eine andere 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