Trick 24: Per FLEX neue Erg.Menge aus Satznummern anlegen


Aufgabe: 1. Mehrere einzelne Satznummern zu einer Erg.Menge vereinigen
             2. Einen ganzen Bereich von Satznummern zusammenfassen

1. Mehrere einzelne Nummern
Der Befehl find #a,b,c geht nur bei avanti, um aus den Satznummern
a,b,c eine Ergebnismenge zu machen. Das kommt, weil a99 das '#'
als Aufforderung deutet, sich NUR um die dahinter stehenden Satznummer
zu kümmern und sonst gar nichts, wobei eine bestehende Erg.Menge
unangetastet bleibt.

Und so kann man a99 austricksen:

find per xyz or #a,b,c

xyz ist ein nicht existenter Name, d.h. der erste Teil
des Befehls liefert die leere Menge. Das "or" wird dennoch
ausgeführt, wie man ja auch erwartet, und an der Stelle
klappt dann die Angabe #a,b,c!
Es ist sogar möglich, statt "per" irgendeinen nicht
existenten Registernamen zu verwenden. Es funktioniert
z.B. auch
find ... ... or #a,b,c

Was hinter "find" steht, kann auch vorher per var "..."
aufbereitet werden, dann in der nächsten Zeile nur "find"

2. Ganze Nummernbereiche
Wenn man die Sätze 1000 bis 2000 als Erg.Menge haben will, ist
Methode 1 ungeeignet. Im DOS-Programm PRESTO war es ganz einfach:

  Anzeigebildschirm mit ganz beliebigem Satz
  x #1000 eingeben: Satz 1000 erscheint
  (   tippen - Nummer 100 wird gemerkt
  x #2000 eingeben: Satz 2000 erscheint
  )  tippen - fertig ist die Ergebnismenge!

Anders, aber nicht schwieriger ist es mit a99 - man macht es jetzt so:
(ab V28.4)

X ergnum
Eine Eingabezeile erscheint, "Satznummern? (z.B. 1000-2000)"
1000-2000   eingeben
fertig, die Erg.Menge erscheint.

Der Trick steckt also im neuen FLEX ergnum.flx. Der ist gar nicht mal
so lang, hier haben wir den wichtigen Teil, samt Kommentar:

  -----------------------------------------------------
  ERGNUM.FLX : Ergebnismenge aus Nummernbereich bilden
  2008-05-21
  ...
ask Satznummern? (z.B. 1000-2000)
if "" end
ins #unE
if not %-% mes BINDESTRICH FEHLT;end

  Zaehler auf den Anfangswert setzen
Z=#unE

  Datei f. externe Erg.Menge oeffnen
open x x.set
  Ueberschrift
wri "Saetze " #unE n

  Schleife zur Abarbeitung von #unE bis #unL
:loop
  Satznummer schreiben, neue Zeile
wri Z n
  erhoehen
Z+1
if Z<#unL jump loop
  #unL ist erreicht, dann Datei zumachen
close x

  und einlesen als ext. Erg.Menge
read set x.set
  zeigen
show list
end
  --------------------------------------------------------

Es wird also, und das ist der Trick, eine Datei x.set angelegt, in der
dann nichts anderes steht als eine Überschriftszeile und dann die
Liste der Nummern von 1000 bis 2000. So eine Datei entsteht auch, wenn
man über das Menü "Datei / DOS-Programm" PRESTO aufruft und damit dann
eine Ergebnismenge per F4 ausgibt. Mit  read set x.set  kann man
die sog. "externe Erg.Menge" einlesen - ob sie nun von PRESTO angelegt
wurde oder sonstwie.