[Allegro] Trick 46: Alle #nn-Felder durcharbeiten
Bernhard Eversberg
ev at biblio.tu-bs.de
Di Jun 5 08:59:08 CEST 2007
Trick 46: Alle #nn-Felder durcharbeiten
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 aktzellen 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
Mehr Informationen über die Mailingliste Allegro