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