[Allegro] Frage zu #t{'…'} im Indexparameter; Wiederholungskategorien
Bernhard Eversberg
ev at biblio.tu-bs.de
Mi Nov 13 14:54:57 CET 2013
Am 13.11.2013 14:32, schrieb Fischer, Thomas:
>> Es stellte sich raus, daß Herr Fischer in den Indexparametern
>> gesetzt hat:
>>
>> ke=8
>>
>> Der Wert ke ist nicht als Trennzeichen zwischen zwei Schlüsseln
>> gedacht, sondern als automatisches Endezeichen für jede
>> Kategoriezeile, in der keine Postfixe spezifiziert sind, das ist
>> etwas ganz anderes: Wenn in den Parametern z.B. Zeilen wie
>> #uxy
>> stehen, wird dahinter jeweils der Code 8 gesetzt. Und das
>> war der Grund für Fischers Kalamität.
>
> Ich habe nicht herausfinden können, wann dieses ke=8 in die
> Indexparameter gekommen ist, es ist jedenfalls schon sehr
> lange da. Und so unauffällig, dass ich es auch schon lange
> vergessen hatte...
Es kann in der Vergessenheit verbleiben, weil es künftig ignoriert wird.
>
> Allerdings fällte es mir schwer, mir vorzustellen, was denn genau
> passiert ist. Das ke=8 steht offensichtlich dort um zu verhindern,
> dass einzelne Werte zusammengeklebt werden statt einzeln im
> Register zu stehen. Offenbar wird die "8" aber meistens (?) gar
> nicht angehängt, sonst hätte schon meine Ausganssituation
> #udx
> #ute
> #t{8}
> nicht funktionieren können.
Weil ke=8 gesetzt ist, wird schon hinter #udx und vor #ute die 8
gesetzt, denn ke bedeutet: setze diesen Wert hinter jede mit
# angegebene Kategorieangabe, also auch hinter den Wert von #udx, falls
da kein bedingtes Postfix angegeben war.
Das wollen Sie aber nicht.
>
>> Der Wert 8 ist außerdem NICHT als allgemeines Endezeichen eines
>> Schlüssels zu verstehen. Er ist NUR zu setzen innerhalb eines
>> Abschnitts in den Parametern, wenn dort, etwa in einer
>> Schleife, mehrere Schlüssel hintereinander produziert werden.
>
> Genau so wurde das bei mir benutzt. Ich finde es aber auch immer
> unheimlich, wenn Dinge ohne mein Zutun und/oder hinter meinem
> Rücken passieren: Wann wird wie nach welchen Kriterien ein
> Registereintrag beendet, wenn ich ihn nicht explizit mit "8"
> abschließe?
Der Registereintrag wird beendet, wenn #+# kommt. Es steht dann
nämlich ein Code 0 am Ende der erzeugten Zeichenfolge. Und die wird dann
sofort verarbeitet, bevor die nächste ak-Anweisung eine neue
Zeichenfolge generiert.
Sie können aber nicht den Code 0 absichtsvoll zwischen zwei
EInträge setzen, denn 0 beendet in C eine Zeichenfolge.
Die 8 nicht, die ermöglicht also, daß die Zeichenfolge in
mehrere zerlegt wird, die dann einzeln einsortiert werden.
> Und was ist der Unterschied zu dem Verhalten, das ein korrekt
> ausgewertetes ke=8 z.B. in einer Exportparameterdatei
> bewirken würde?
Mit ke muß man wirklich sehr bewußt und vorsichtig umgehen,
im Handbuch wird nicht umsonst empfohlen, es nur bei
Pauschalexport einzusetzen.
> Es sieht so aus, als ob ein #t{'Text'} eine vorherige Ausgabe des
> Trennzeichens ke erzwingen würde; gilt das nur für Indexparameter
> oder auch für andere Dateien in der Exportsprache?
>
Ja natürlich! Denn wenn eine Zeile #t... kommt, was soll das
Programm denn machen? Es ist in dem Moment entweder ein bedingtes
Postfix definiert, oder nicht. Wenn nicht, dann wird ke genommen,
sobald die nächste mit #t beginnende Zeile kommt. Denn man wird
ja nicht wollen, daß das Postfix erst NACH der #t-Zeile wirklich
rauskommt, das ergäbe ein Durcheinander.
>> Überzählige Codes 8 an einem Schlüsselende machen nichts aus,
>> aber zwischen Präfix und Text bzw. zwischen zwei Teilen eines
>> Schlüssels machen sie Ärger.
>
> Ja, aber offenbar erst, wenn noch ein #t{'x'} dazukommt. Ist das
> nicht seltsam?
>
Nein, aus oben erklärten Gründen.
Summa summarum: Kein ke in Indexparametern, und Code 8 nur, wenn
sichergestellt ist, daß anschließend nichts mehr kommt ODER ein
korrektes Präfix für den nächsten Schlüssel.
B.E.
B.E.
Mehr Informationen über die Mailingliste Allegro