[Allegro] V33.5beta und Vb.255-Vorab

Bernhard Eversberg ev at biblio.tu-bs.de
Fr Nov 15 07:51:44 CET 2013


Am 14.11.2013 16:00, schrieb Thomas Berger:
>
> Die Daten von etwa srch.exe und index.exe sind 31.7.2013, im SVN
> gibt es aber seitdem Aenderungen: Sind die in inst-beta dennoch
> auf dem aktuellsten Stand?
>
Von der Sache her ja, weil diese Programme von den späteren Änderungen
nicht betroffen waren.
Zwecks Irritationsvermeidung wollen wir aber gerne die Programme
nochmal kompilieren.

>
>> Lokaler Ersetzungsbefehl (a99 und acon)
>> ---------------------------------------
> ...
>> und jetzt NEU:
>>
>> o  Jedes Zeichen, ob druckbar oder nicht, kann man auch in der Form
>>     ^NNN angeben, mit genau drei Dezimalziffern NNN, also z.B.
>>     ^013^010  statt ^M^J,  oder ^170 fuer das Nichtsortierzeichen.
 > ...
 > Es waere schoen, wenn das auch fuer den dem Anwender zugaenglicheren
 > Global-Menue bei den Ersetzungen eingefuehrt werden koennte: Ich
 > stand neulich wieder vor dem eigentlich absolut typischen Problem,
 > dass aus irgendwelchen Fremddaten $-Zeichen statt Unterfeld-Dreiecke
 > in die Datenbank gekommen waren ... und konnte mir nur so helfen, dass
 > ich schnell eine Mini-Parameterdatei mit globaler Manipulation
 > erstellt habe.


Da wäre es jetzt nett gewesen, diese Mini-Parameterdatei zur
Nachnutzung mitzuliefern. Aber schau'mer mal, vielleicht können wir
da noch was tun, und kommen wir zur Sache, zu der etwas weiter
auszuholen ist:

Zum einen haben wir dem Problem schon mal einen Beitrag in unserer
Trick-Serie gewidmet und einen universellen FLEX dafür geliefert:

   http://www.allegro-c.de/flex/tricks/trick74.htm

Hiermit könnten wir's nun gut sein lassen, wollen uns aber nicht
den Anschein der Bequemlich- oder Wurschtigkeit einhandeln.

Der FLEX-Befehl  ins _abc_XYZ_  nutzt ein anderes Unterprogramm
als die Globale Ersetzung:

Glob.Ersetzung: Das Menü nutzt  Rec::SrRp()  in record.cpp
    Hier kommt's ja darauf an, beim Ersetzen von Kategorienummern das
    Datenfeld dann auch im Satz zu verlagern! Ferner gibt es die
    Funktionen, ein Feld aus dem Satz zu entfernen ( _#nnn__ ) oder
    neu einzufügen ( __#nnn text_ ).
    UND diese Routine hat eben auch die Sonderfunktion, daß $ als
    "Abzwack-Operator" wirkt, wie das im Trick 74 genannt wurde.
    Genauso ist es mit der Glob.Ersetzung in FLEX, wenn man schreibt
    _abc_XYZ_  statt  ins _abc_xyz_
    Auch hier kann's ja sein, daß eine Verlagerung etc. nötig wird.

ABER im Gegensatz dazu:

FLEX: ins _abc_xyz_ nutzt  a99::Repla()  in a99.cpp
    Hier wird nur innerhalb des iV-Textes ersetzt, da kommt ein
    Feldverlagern oder Beseitigen bzw. Einfügen nicht vor.
    Dazu wurde die genannte, einfachere und schnellere Routine
    geschaffen, in welcher der $ nicht die o.g. Sonderwirkung hat.
    Hier ist daher seine Ersetzung kein Problem, und der zitierte
    Trick, auch für Ergebnismengen nachnutzbar, führt das vor.


Was also zu tun wäre, ist die Modifizierung der Funktion SrRp() in
der RECORD-Klasse.
Das ginge NICHT so, daß wir einfach die Eingabe von $ in der Form
^036 ermöglichen, denn solche Codierungen werden in der neuen Routine
zunächst in die eigentlich gemeinten Bytes umgesetzt, was ja
normalerweise nicht-druck- und -eingebbare Zeichen sind, weswegen die
Möglichkeit erst geschaffen wurde. Nach dieser Vorbereitung steht
im Ersetzungsbefehl also nicht mehr ^036, sondern $, und das Problem
wäre nicht weg. Schlagen Sie einen anderen Weg vor, bevor wir einen
ersinnen, der dann aus anderen Gründen wieder nicht genehm ist.

B.E.














Mehr Informationen über die Mailingliste Allegro