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.