[Allegro] Trick 47: Längsten Satz finden
Bernhard Eversberg
ev at biblio.tu-bs.de
Do Jun 28 08:58:28 CEST 2007
Trick 47 : Längsten Satz finden
Aufgabe: Schnell mal eben in einer Datenbank den längsten Satz finden!
Warum: allegro-Datenbanken haben keine festgelegte Satzlänge, jeder
Satz nimmt nur soviel Platz ein, wie er eben braucht. Grenzenlos lang
können Sätze jedoch nicht sein und auch nicht grenzenlos zahlreich die
Indexeinträge. Es ist nur nicht leicht zu sagen, wo denn die Grenzen
wirklich verlaufen. --> Grenzen Schranken, Barrieren
http://www.allegro-c.de/grenzen.htm
Für Testzwecke kann es also interessant sein, mal den längsten
Datensatz herauszufinden.
Das leistet der folgende FLEX:
(den man sich als Datei lg.flx kopieren und mit X lg starten kann)
#ulg 0
first #
:loop
keycheck
Wurde [Esc] gedrückt?
Wenn ja und Nachfrage mit ja beantwortet, dann -> :exit
if yes jump exit
var jb
if >#ulg ins #ulg;var i;ins #uis
next #
if yes jump loop
:exit
Ende, jetzt den Satz noch zeigen
var "#" #uis
find
sho rec
disp
und Meldung:
var "Laengster Satz : " #uis ", Laenge " #ulg
message
Er findet in der gesamten Datenbank den längsten Satz und zeigt ihn.
Wenn man first # und next # ersetzt durch first bzw. next,
wird nur die aktuelle Egebnismenge durchgeforstet.
Der Ablauf kann mit Esc unterbrochen werden (Befehl keycheck), dann
erhält man den längsten bis dahin gefundenen Satz.
Der Trick ist nur die interne Sondervariable jb, mit der man die Länge
des jeweils aktuellen Satzes erhält. Die Zeile
if >#ulg ins #ulg;var i;ins #uis
vergleicht die so erhaltene Länge mit dem Wert in der Variablen
#ulg. Ist #ulg kleiner, wird der iV-Wert, also der nun größere,
in #ulg kopiert und die interne Satznummer (denn die wird ja am
Ende gebraucht) wird in #uis aufbewahrt. Am Ende hat man die
gewünschten Werte in diesen beiden Variablen.
Wo ist die Liste der internen Sondervariablen?
Hier:
http://www.allegro-c.de/flex/seite09_3.html#_Kap09_03
oder auch in xcstring.rtf
Mehr Informationen über die Mailingliste Allegro