Delphi-PRAXiS

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'"

p80286 9. Jul 2009 16:06

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Delphi-Quellcode:
 CharToOem(PChar(s), Length(s));
-->
 CharToOem(PChar(s), Pchar(s)));
 Writeln(so);
oder aber mit zwei strings si und so
Delphi-Quellcode:
CharToOem(PChar(si), Pchar(so));
ggf. muß auch AssignFile und CloseFile verwendet werden!

Gruß
K-H

Delphi_gn7 9. Jul 2009 17:00

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
bei deinem 1. vorschlag werden die zeichen nicht korrekt angezeigt, so wie am anfang und wenn ich es mit deiner 2. variante mache, läuft das programm, terminiert aber fast sofort nach dem start, obwohl kein readln fehlt.

p80286 10. Jul 2009 09:39

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Hallo Delphi_gn7

was funktioniert wann nicht?
könntest Du mal den Sourcecode bekannt machen?

Gruß
K-H

Delphi_gn7 10. Jul 2009 10:54

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Klar, hier ist er:

Delphi-Quellcode:
program uni;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var txt:textfile;
    si,so: string;

begin
 assign(txt,'E:\t.txt');
 reset(txt);
 while not eof(txt) do
 begin
   ReadLn(txt, si);
   CharToOem(PChar(si), PChar(so));
   Writeln(so);
 end;
 ReadLn;
 close(txt);
end.

DeddyH 10. Jul 2009 11:50

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Du reservierst ja keinen Speicher für so.
Delphi-Quellcode:
program uni;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var text: TextFile;
    si,so: string;

begin
  try
  { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
    AssignFile(text,'E:\t.txt');
    try
      Reset(text);
      while not Eof(text) do
        begin
          Readln(text,si);
          SetLength(so,Length(si));
          CharToOem(PChar(si),PChar(so));
          Writeln(so);
        end;
    finally
      CloseFile(text);
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  Readln;
end.
[edit] Übrigens: Du könntest Dir so auch sparen, da Du si als Ein- und Ausgabe an CharToOEM übergeben kannst. [/edit]

Delphi_gn7 10. Jul 2009 13:00

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
danke, das mit dem setLength wusste ich noch nicht.

was bewirkt denn:

Delphi-Quellcode:
except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
?

mfg

DeddyH 10. Jul 2009 13:04

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
Das bewirkt die Ausgabe der entsprechenden Fehlermeldung im Falle einer Exception.

Delphi_gn7 10. Jul 2009 18:34

Re: Umlaute und 'ß' aus Textdatei korrekt anzeigen
 
dankesehr!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.

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