Entwickler-Ecke

Dateizugriff - Textdatei mit alten DOS Zeichen lesen


hansg - Fr 10.01.03 18:34
Titel: Textdatei mit alten DOS Zeichen lesen
Hallo,
ich möchte eine Textdatei die alte Dos Zeichen (Rahmenlinie etc.) enthält in ein Richedit laden und ausdrucken, das ganze funktioniert schon.
Das einzige was falsch angezeigt wird sind die Sonderzeichen dafür werden Ö bzw. andere angezeigt.
Wie kann man das heraus filtern?, der Rahmen hat immer die gleiche Größe nur der Textinhalt ändert sich.

Gruß Hans


Raphael O. - Fr 10.01.03 22:17

kann die Bilder nciht sehen, abgesehen davon, dass ich auch sonst vielleicht keine Lösung wüsste *ggg*

Fiji-Fighter


Brueggendiek - Sa 11.01.03 00:52

Hallo Hans!

Vor einem ähnlichen Problem stehe ich leider auch gerade.
Bei mir ist es ein Programm, das Druckdateien in ESC/P unter Windows ausdrucken soll. Das funzt für Grafik-Druck bestens, aber nicht beim Textdruck.

1. Um einen großen Teil der DOS-Zeichen (ASCII) anzeigen zu können, muß der Canvas des Ausgabemediums ein neues Font-Objekt zugeordnet werden. Dazu gibt es die Windows-API-Funktion CreateFont. Wichtig ist dabei Folgendes: Der Parameter

Quelltext
1:
DWORD fdwCharSet,            // character set identifier                    

muß mit "OEM_CHARSET" belegt werden. Und natürlich darf nicht vergessen werden, den Font nach Gebrauch mit DeleteObject wieder freizugeben.

2. Das ganze funktioniert nur eingeschränkt! Da Deine Grafiken nicht dargestellt werden, kann ich nicht sagen, ob dies für Dich zutrifft. Leider verwendet Windows die universelle Codepage 850, während die beste DOS-Codepage 437 (USA) ist. 437 enthält einfache und doppelte Linien sowie alle Verknüpfungen (Winkel, T und Kreuz in allen Kombinationen Einfach/Doppelt). 850 hat leider keine Verknüpfungen Einfach/Doppelt! Zusätzlich fehlen die griechischen Buchstaben (z.B. Omega). Insgesamt fand ich 47 Abweichungen!

Alternativ ergibt sich folgende Möglichkeit: Die Linien-Grafikzeichen gemäß ASCII-Tabelle identifizieren und durch MoveTo und LineTo nachbilden, die übrigen Zeichen mit "OemToChar" oder OemToCharBuff" in einen ANSI-String umwandeln und ausgeben. Das klappt natürlich nicht mit den Griechen etc.!

Unter Windows NT soll ggf. etwas mit Unicode gehen. Da ich nur Windows 98 habe, kann ich nur feststellen, daß Unicode auch die Linien fehlerhaft darstellt - "|", "+" und "-" ersetzen die Linien. Aber dann sind wenigstens die Akzent-Buchstaben an den Ecken etc. weg und der Mangel fällt nicht gleich auf - dafür habe ich dann 74 Abweichungen :mrgreen:

Gruß

Dietmar Brüggendiek


hansg - Sa 11.01.03 14:08
Titel: Re: Textdatei mit alten DOS Zeichen lesen
Hallo,
konnte nicht antworten da mein Account nicht mehr ging.

Die Zeichen befinden sich immer an der gleichen Position, kann man diese
irgendwie rauskopieren und den übrigen Text in ein 2. Richedit anzeigen?


Gruß Hans


wulfskin - Sa 11.01.03 14:45

Hallo Hans!

Ich denke, dass machst du am einfachsten mit der Funktion StringReplace, indem du einfach das nichtgewollte Zeichen durch "" (nix) ersetzt!

Gruß Hans ;)!


delphist - So 16.02.03 20:39
Titel: OEMtoChar(PChar(s),PChar(s));

Quelltext
1:
OEMtoChar(PChar(string),PChar(string));                    

Damit hast du den Text von ASCII nach ANSI konvertiert und nun kannst du den konvertierten Text, in die RichTextBox laden!
Hoffentlich klappt es so!
Viel Spaß damit!
delphist


Tazidus - Mo 29.11.04 11:47
Titel: OEMtoChar
Hallo,
unten haben ich gelsen, dass man mit OEMtoChar einen ASCII Text in ANSI umwandeln kann.

Leider funktioniert diese Funktion nicht bei mir. Muss ich noch eine Unit implementieren. In der Delphi-Hilfe gibt es keinen Eintrag hierzu.

Kann mir einer diese Funktion näher beschreiben?
Danke


jasocul - Mo 29.11.04 13:11

Du musst für das TRichEdit noch den richtigen Zeichensatz wählen. Mit "Courier New" müsste die Konvertierung dann funktionieren. Andere Zeichensätze kennen die Grafikzeichen nämlich gar nicht.