[Allegro] Zeichen im Namen freier Variable

Thomas Berger ThB at Gymel.com
Fr Dez 19 10:12:05 CET 2014


Lieber Herr Eversberg, liebe Liste,

>> Der Test
>>
>> x var "123"\ins $abc(def)xyz\var ""\var $abc(def)xyz\mess\$0>test.txt
>>
>> zeigt jedoch, dass in die Variable $abc(def)xyz zwar geschrieben
>> werden kann, jedoch nicht daraus gelesen...
>>
> Eine harmlose Kuriosität, weiter nichts: Das Zeichen ) darf vorkommen,
> ( aber nicht.
> 
> Zu erwägen wäre, ob wir wenigstens die '(' auch noch gültig machen
> sollten+könnten, aber wurde sie irgendwo schon vermißt? Wer Klammern in
> Variablennamen möchte, kann < >  oder  [ ]  verwenden oder sogar { }.

Das ist nicht der Punkt: Freie Variable lassen sich ja als Ersatz
fuer die in der Flex/Job-Sprache nicht existierenden "Hashes" (assoziative
Arrays, Key-Value-Stores, ...) einsetzen. D.h. ich nehme "Daten", wie
etwa "(DE-588)12345678" und will die als /Schluessel/ nutzen, konstruiere
also:

var "$store." $key "=" $value
ins

fuers Schreiben bzw. fuers Lesen

var "$store." $key
var
if not "" jump tue_dies_und_das

(der konkrete Fall sah so aehnlich aus, ich wollte Registerzeilen,
die ich im gleichen Job schon einmal nachgeschlagen hatte, aus
Performancegruenden cachen)

Ich sehe ein, dass die freien Variablen keine echten assoziativen
Arrays sind (zwar so implementiert, aber als Einzelvariablen
unterliegen ihre "Namen" zwangslaeufig(?) gewissen Beschraenkungen
bzgl. " ", ";", "=", auch "\", '"', "'" und weitere???), meine Forderung
ist eigentlich nur, solche Einschraenkungen auf ein Minimum zu
reduzieren /und/ ganz akribisch zu dokumentieren.

Man koennte allerdings untersuchen, ob es in den "Namen" moeglich
sein koennte, gewisse Teile (durch "'...'", '"..."', oder auch
"[...]" oder "{...}" besonders zu schuetzen, so dass der Sprach-
Parser der Flex- und Job-Sprache keine falschen Schluesse zieht:

Ob die "Variable" nun

$store.(DE-588)12345678

heisst oder

$store.{(DE-588)12345678}
oder
$store."(DE-588)12345678"

ist mir voellig wumpe, nur die Sonderbehandlung der "(" ist doppelt laestig:
Erst einmal muss man sich staendig daran erinnern, dass gewisse Daten in
genau diesem Nutzungszenario eine Vorbehandlung benoetigen und zweitens
muss man die dann auch noch durchfuehren, was beim Schreiben besonders
umstaendlich ist, da ja der "Key" so behandelt werden muss, der "Value"
aber keinesfalls:


var "$store." $key
ins _(_{_
ins _)_}_
var + "=" $value
ins

/Noch/ ein anderer Ansatz (fuer V35?) koennte sein, es insgesamt
stromlinienfoermiger zu machen:

$store.$key=$value

var $store.$key
if "" ...


d.h. "$store.$key" ist von Sonderzeichen, die die Jobsprache
irritieren koennten, frei, und bei solchen Konstruktionen wird
von hinten nach vorne sukzessive jedes "$...." erst einmal
aus den freien Variablen aufgeloest, bis dann ein
$....
uebrig bleibt, das m.E. dann auch ab Zeichen zwei beliebige
Sonderzeichen (bis auf " " und evtl. "=") enthalten darf,
sogar "ä", "&#xFC;" und aehnliche Scheusslichkeiten

Die "Persistenten Variablen" haben uebrigens das Problem
speziell mit dem "(" oder ")" nicht, m.E. sollte hier
sichergestellt werden, dass bzgl. Sonderzeichen und Zugriffs-
mechanismen alles ganz identisch mit den Freien Variablen
ist, d.h. was ich mit "&..." machen kann, geht stets und
stets genau so mit "$..." und umgekehrt.

viele Gruesse
Thomas Berger



Mehr Informationen über die Mailingliste Allegro