Seltsames Detail um get/ansi/ins/write herum
Thomas Berger
ThB at gymel.com
So Feb 8 11:16:08 CET 2004
Lieber Herr Allers,
> a ä ö ü Ä Ö Ü ß z
>
> (also: a, a-, o-, u-, Ä-, O-, U-Umlaut, scharfes s, z). Diese Zeile
> lese ich ein und gebe sie aus in die rtf-Datei aus.rtf, die ich dann
> zeigen lasse; all das macht folgende Flexdatei:
>
>
>
> xport f aus.rtf\write Fdisphead.rtf
> open ein.txt\get\ansi
>
> //Variante 1 (funktionierend):
> write\write n
> //Variante 2 (nicht für A-Umlaut funktionierend):
> ins #ux2\write #ux2 n
>
> write "}"\close\close x
> h aus
>
>
>
> Das riesige Rätsel, das sich mir stellt, ist, warum Variante 1 für
> _alle_ Zeichen der Eingabedateizeile funktioniert, bei Aktivierung von
> Variante 2 dagegen (Deaktivierung von Variante 1) das Ä (A-Umlaut)
> _nicht_ richtig (also nicht als Ä) dargestellt wird!!!
Einen aehnlichen Effekt bekommen Sie hin, wenn Sie folgendes
eingeben: x var "äöüÄÖÜ"\ansi\ansi\asci\show IV
oder x var "äöüÄÖÜ"\asci\ansi\ansi\show IV
d.h. einmal zuviel von Windows nach DOS konvertieren und das
dann Rueckgaengig machen wollen.
"Ä" ist das einzige dieser Zeichen, dessen Windows-Code bei
nochmaliger Anwendung der o-Tabelle nicht eineindeutig
auf das Zeichen 127 abgebildet wird [und ausserdem durch
Zufall das einzige Zeichen aus der Liste, das nicht Ziel
einer Umsetzung durch die o-Tabelle ist]. Das polnische L,
das man in Ihrem Beispiel anstelle des "Ä" sieht, ist das
letzte Zeichen, das per o-Tabelle auf 127 abgebildet wird.
D.h. korrekte Behandlung des "Ä" ist ein prima Indikator
dafuer, ob nicht einmal eine ueberfluessige (und wie wir
gesehen haben auch schaedliche) Umwandlung mittels o-Tabelle
hin und zurueck erfolgt.
Konkret an Ihrem Beispiel laesst sich die Angelegenheit auf
folgenden Flex verkuerzen:
x open ein.txt\get\ansi\mess\ins #ux2\var #ux2\mess
beim ersten "mess" ist das "Ä" noch korrekt, beim zweiten
nicht mehr. Betrachtet man #ux2 im Hintergrundspeicher, so
ist dies schon nicht korrekt. Es wird also beim "ins"-Befehl
eine Ueberfluessige (und schaedliche) Leer-Umwandlung
iv -> ANSI -> ASCII -> #ux2 durchgefuehrt, ein klarer Bug
von a99 [Dass es nicht ASCII -> ANSI ist, kann man mittels
des Zeichen 228 entscheiden: Das a mit Breve (188) wird hier
in #ux2 ebenfalls zerstoert:
x var "äļ"\ansi\ins #ux2\mess\var #ux2\mess
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro