Trick 46: Alle
#nn-Felder durcharbeiten
Ohne zu wissen, wiviele und welche es gibt
Aufgabe: Alle Felder, deren Nummer
mit #nn anfängt, durcharbeiten.
Warum? Manchmal weiß man z.B.
nicht, in welchem von evtl. mehreren
Mehrfachfeldern eine bestimmte
Angabe steht. Oder man will die Inhalte
aller dieser Felder in eine Datei
schreiben.
Lösung 1
========
Man nimmt sich hintereinander alle
Felder vor und prüft dann nur
diejenigen, deren Nummer mit nn
anfängt.
Dazu dienlich sind die internen
Sondervariablen k_1 und k_2:
k_1 = Erstes Datenfeld des
aktuellen Satzes, incl. der Feldnummer
k_2 = nächstes Feld, "" wenn
es keins mehr gibt
Damit sieht die Lösung so aus:
Gewünschte Nummer in
#uxx vorgeben
#uxx 30
perf abarbeitung
jump rest
Hierher wird aus dem UP
gesprungen:
:aktion
Feldinhalt jetzt in iV,
incl. Feldnummer!
... irgendwelche Aktionen
mit dem Inhalt
zurück in das UP!
jump weiter
:rest
...
end
Unterprog., um das man
sich nicht kuemmern muss.
Es funktioniert mit jeder
Konfiguration.
:abarbeitung
var 34 #uxx 'zz' 34
ins #uxy
var 34 #uxx 34
ins #uxx
var k_1
:loop
if >#uxx if <#uxy jump
aktion
:weiter
var k_2
if not "" jump loop
return
Im Abschnitt :aktion hat man
den gesamten Feldinhalt incl. der
Nummer in der iV. Daher kann man
z.B. schreiben
ins #uxz
.. irgendwelche
Aenderungen an #uxz
var "#" #uxz
ins
jump weiter
Dadurch kann man also gezielt die
einzelnen Feldinhalte auch
modifizieren.
Und noch ein Vorteil:
Statt #uxx 30 kann man auch schreiben #uxx 3
Dann werden alle Felder bearbeitet,
die mit #3 beginnen!!!
===========================================================
Lösung 2 (H. Allers)
========
Man bastelt alle in Frage kommenden
Feldnummern nacheinander
in der iV zusammen und
läßt sich mit erneutem "var" den Inhalt
geben (wenn es denn einen gibt).
Das ist besonders trick- und
damit lehrreich, aber ansonsten hat
es keine Vorteile gegenüber
Lösung 1, auch schneller ist
es wohl kaum:
#uxx "#30"
Z=31
:anfang
Es beginnt mit 32 = Spatium
Z+1
var Z
problematische
Folgezeichen uebergehen: $ : ( .
if =36 jump anfang
if =58 jump anfang
if =40 jump anfang
if =46 jump anfang
if >122 end
var #uxx ' ' Z
in iV steht jetzt
z.B. #30 65
var
und jetzt: #30A
ins #ux2
var // #ux2 ist
Kategoriebezeichnung
und jetzt der Inhalt von
#30A - das ist der Haupttrick
if not "" perf aktion
jump anfang
Was will man machen mit
dem Inhalt?
:aktion
ins #ux1 // #ux1 ist
aktueller Kategorieninhalt
var "Mit >>" #ux2 #ux1
"<< machen, was man will"
mes
return