[Allegro] acon: Nicht genug Magie
Thomas Berger
ThB at Gymel.com
So Jun 5 14:46:59 CEST 2011
Lieber Herr Eversberg, liebe Liste
Preisfrage im Zusammenhang mit Bibliothekssigeln: Wenn
var "#uSG38"
ins
Write #uSG newline
die Zahl 38 ausgibt, was tut dann
var "#uSG5"
ins
Write #uSG newline
Richtig: Es wird nichts ausgegeben.
Auch richtig: Es wird die Zahl 5 ausgegeben.
Die Antwort haengt vom eingesetzten Kategorienschema ab: Bei
t3,k5 etwa ist #uSG kuerzer als die paradigmatische #kkkf,
die Zuweisung des vollen Textes "38" erfolgt dennoch (das ist
die eigentliche Ueberraschung, denn ~frueher~ und insbesondere
in der Exportsprache musste man geeignet mit Leerzeichen auffuellen,
sonst war der Anfang abgeschnitten, bzw. sogar "#u1" als "#u11 "
schreiben, um die Sonderkategorie ueberhaupt erst einmal ins Raster
der erlaubten Kategorien zu bringen).
Aktuell kann man also in Job-Dateien Zuweisungen an #u-Variable
vornehmen, ohne sich Gedanken ueber die Kategegoriestartposition
der konkreten .CFG-Datei machen zu muessen.
Diese Erleichterung scheitert aber bei "zu kurzen" Zuweisungen,
ich vermute, hier ist "#uSG5" insgesamt so lang wie "#kkkf"
und daher wird zuerst auf Loeschung erkannt und die Sonder-
behandlung der #u-Variablen findet gar nicht erst statt. Laesst
sich das korrigieren? Bzw. wuerde konstant ein Spatium hinter
#uxy unabhaengig vom Kategorienschema ausreichen? (Anwendervariable
koennen mit Spatien beginnen und enden, fuer die Flexsprache ist
allerdings dokumentiert, dass fuehrende und abschliessende
Spatien bei der Zuweisung an Anwendervariable entfernt werden.
Mit dieser Diskrepanz laesst sich leben und insofern wuerde ein
ins-artifizielles Spatium auch nichts bestehendes kaputt machen)
[Was stets und unabhaengig vom Kategorienschema funktioniert
ist
var "5"
ins #uSG
Das Beispiel oben stammt aber aus der Verarbeitung von -U-Schaltern
aus Kommandozeilen, d.h. zur Laufzeit sollen Anwendervariable
mit Vorgaben aus der Kommandozeile geimpft werden und daher muss
in der Jobdatei der Name der Variablen variabel gehalten sein.
"ins" ist auch kein allgemeines "eval"-Feature und eignet sich nur
fuer Zuweisungen, der Versuch, sich zur Laufzeit ewas zusammen-
compilieren zu lassen, scheitert erwartungsgemaess mit einer
Fehlermeldung:
var 'var "5";ins #uSG'
ins
]
viele Gruesse
Thomas Berger
P.S.: Sehe ich das eigentlich richtig, dass es (in acon, nicht in a99) keine
Moeglichkeit gibt, den Inhalt von zwei freien Variablen zu vergleichen?
Der Vergleich der iV "if =$xyz" ist ja nur fuer a99 implementiert, acon kennt
zwar das flexiblere "if #kkf = #llx", aber nur fuer Kategorien und Anwender-
variable :-(
Mehr Informationen über die Mailingliste Allegro