[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