[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