AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

Ein Thema von Gelmo · begonnen am 15. Okt 2020 · letzter Beitrag vom 16. Okt 2020
Antwort Antwort
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
29 Beiträge
 
Delphi 10.3 Rio
 
#1

Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 15. Okt 2020, 18:13
Hallo zusammen!
Ich habe mir in Excel eine Liste mit französischen Vokabeln incl. ihrer Sonderzeichen angelegt (z.B. ç = [links-Alt] 135). Wenn ich die als CSV-Datei abspeichere, kann ich sie mit Excel, Libre Office Calc oder dem Windows-Editor öffnen, und die Sonderzeichen werden korrekt dargestellt.
Wenn ich die CSV-Datei aber als Textfile in Delphi einlese, werden die Sonderzeichen nicht korrekt wiedergegeben.
Ich bin ratlos, wie dies Problem gelöst werden kann. Meine Vorstellung ist, dass man Delphi mitteilen muss, dass es sich um Unicode-Zeichen handelt. Vielleicht kann mir hier jemand weiter-helfen.
Dafür schon im Voraus herzlichen Dank!
MfG Gelmo

Codebeispiel:
Delphi-Quellcode:
 
var
  Vokdatei,
  DSZ         : String;
  CSVF         : Textfile;
procedure TForm1.Button2Click(Sender: TObject);
begin

  VokDatei:=Opendialog1.FileName;
  filemode:=0; // read-only
  assignfile(CSVF,VokDatei);
  reset(CSVF);
  while not eof(CSVF) do begin
    readln(CSVF,DSZ); // DSZ = Datensatz
    showMessage(DSZ);
  end;
end;
Ergebnis:
Excel: mère français «bientôt»
Editor : mère;français;«bientôt»
Delphi : mère;français;«bientôt»

P.S.
Zusatzbemerkung : Als Separator verwendet Excel offenbar das Semikolon, aber was dient als Delimiter? Ist aber aktuell nicht von Bedeutung, da die Datensätze „technisch“ richtig übernommen werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 15. Okt 2020, 18:23
Die Datei scheint im UTF-8 Format zu sein und wird als Standard-ASCII interpretiert zu werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
29 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 15. Okt 2020, 18:43
OK, Excel verwendet also UTF-8. Nur, wie kann ich Delphi veranlassen, diesem Zeichensatz ebenfalls zu verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von Gandalf2265
Gandalf2265

Registriert seit: 24. Mai 2009
Ort: Laurenburg (Unterkante Westerwald)
16 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 15. Okt 2020, 19:06
Ich verwende für so etwas eine Stringliste:
Delphi-Quellcode:
procedure demo;
var
  t : TStringlist;
  LDateiname : string;
begin
  LDateiname := 'meinecsvdatei.csv';
  t := TStringlist.create;
  try
    t.LoadFromFile( LDateiname, TEncoding.UTF8 );
    t.tue_irgend_etwas...
  finally
    t.free;
  end;
end;
Thorsten Maxeiner
allways change a running system
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
29 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 15. Okt 2020, 19:37
Vielen Dank!
Ich habe gerade hier im Forum gefunden, dass readln und writln nur mit ASCII funktionieren.
Ich probier es jetzt mit einer Stringlist. Das sind gute Aussichten.
MfG Gelmo
  Mit Zitat antworten Zitat
harfes

Registriert seit: 25. Jun 2006
Ort: Rand der Scheibe
176 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 16. Okt 2020, 08:28
Oder Du ersetzt in Deinem Code:

Readln(CSVF,DSZ);
ShowMessage(Utf8ToAnsi(DSZ));


Hartmut
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien

  Alt 16. Okt 2020, 10:16
Aber nicht, wenn DSZ ein String bleibt.
AnsiString, RawByteString oder besser gleich UTF8String.

Bei Letzterem kann man dann auch das Utf8ToAnsi weglassen.
Und warum überhaupt Ansi?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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