Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Umlaute und 'ß' aus Textdatei korrekt anzeigen (https://www.delphipraxis.net/136766-umlaute-und-ss-aus-textdatei-korrekt-anzeigen.html)

Delphi_gn7 7. Jul 2009 19:14


Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Hiho,

ich möchte mit einem Delphi Konsolenprogramm den Inhalt einer Textdatei auslesen und anzeigen lassen, z.B.:
"Dieser Text enthält Umlaute und ein 'ß'."

Wurde der Text in ANSI gespeichert, wird in der Konsole das angezeigt:
"Dieser Text enth[o mit nem '~' Zeichen oben drüber]lt Umlaute und ein '[seltsames Quader-Zeichen]'."

War es zuvor Unicode, sieht das so aus:
"[seltsames Quader-Zeichen]D i e s e r T e x t e n t h [o mit nem '~' Zeichen oben drüber] l t U m l a u t e u n d e i n ' [seltsames Quader-Zeichen] '."

Wie mache ich es in beiden Föllen möglichst einfach möglich, das das 'ß' auch als 'ß' und die Umlaute wie Umlaute, also korrekt, angezeigt werden?
habe erst 1 Jahr Delphi Erfahrung und noch gar keine mit OOP.

Mfg

DeddyH 7. Jul 2009 19:33

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Versuch es mal mit MSDN-Library durchsuchenCharToOem().

himitsu 7. Jul 2009 19:40

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Jupp, das Erste wurde genannt und zum Zweiten,
da wirst du es wohl mal auch als Unicode auslesen müssen, nach Ansi umwandeln und danach dann nochmal mit CharToOEM drüber, oder gleich direkt nach OEM umwandeln.

Delphi_gn7 7. Jul 2009 19:45

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Danke! ich hab eure Vorschläge mal in ein test-Programm integriert:

Delphi-Quellcode:
var txt:textfile;
    s: string;
    c: char;
    i:integer;
begin
 assign(txt,'E:\t.txt');
 reset(txt);
 while not eof(txt) do
 begin
  readln(txt,c);
  write(chartooem(c)); // Fehlermeldung: "Inkompatible Typen: 'Char' und 'PAnsiChar'"
 end;
 readln;
 close(txt);
.. aber leider kommt die oben genannte Fehlermeldung.

himitsu 7. Jul 2009 21:08

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
ja und was besagt die Fehlermeldung?
- du gibst Char/String
- und Funktion will PChar

MSDN-Library durchsuchenCharToOem

kannst ja auch mal im Forum schauen, wie es andere benutzen > Hier im Forum suchenCharToOem

Delphi_gn7 8. Jul 2009 19:17

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
ich hab keine ahnung was PAnsiChar ist...

p80286 9. Jul 2009 10:18

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Aus der D7-Hilfe
Zitat:

Zeiger auf Zeichen

Die beiden fundamentalen Zeigertypen PAnsiChar und PWideChar stellen Zeiger auf AnsiChar- bzw. WideChar-Werte dar. Der generische Typ PChar repräsentiert einen Zeiger auf einen Char-Wert (in der aktuellen Implementation auf einen AnsiChar-Wert). Diese Zeigertypen auf Zeichen werden zur Verarbeitung von nullterminierten Strings eingesetzt. Informationen hierzu finden Sie unter Nullterminierte Strings.
Gruß
K-H

Stormy 9. Jul 2009 10:27

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Hi,

versuch mal

Delphi-Quellcode:
write(chartooem(PChar(c)));

Gruß
Stormy

himitsu 9. Jul 2009 10:44

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
nein: CharToOEM änder die Daten im Puffer
und ReadLn ließt einen String aus und keinen einzelnen Char

Delphi-Quellcode:
var txt: textfile;
    s: string;

begin
assign(txt,'E:\t.txt');
reset(txt);
while not eof(txt) do
begin
  ReadLn(txt, s);
  // eventuell noch ein UniqueString(s); aber ich hoff jetzt
  // einfach mal, daß readLn passende Strings liefert
  CharToOem(PChar(s), Length(s));
  WriteLn(s);
end;
ReadLn;
close(txt);

Delphi_gn7 9. Jul 2009 12:30

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Zitat:

Zitat von himitsu

Delphi-Quellcode:
var txt: textfile;
    s: string;

begin
assign(txt,'E:\t.txt');
reset(txt);
while not eof(txt) do
begin
  ReadLn(txt, s);
  // eventuell noch ein UniqueString(s); aber ich hoff jetzt
  // einfach mal, daß readLn passende Strings liefert
  CharToOem(PChar(s), Length(s));
  WriteLn(s);
end;
ReadLn;
close(txt);

--> Fehlermeldung: "Inkompatible Typen: 'Integer' und 'PAnsiChar'"


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz