![]() |
UTF8 - Große csv-Datei Zeilenweise lesen
Delphi 2009
Früher konnte man mit folgender Varaiante eine Textdatei zeilenweise lesen, jedoch funktioniert das nicht mit UTF8 kodierten Dateien:
Delphi-Quellcode:
OK mit Hilfe einer Stringliste kann ich die UTF8 Daten laden und auswerten:
F: TextFile;
lStr: string; ... AssignFile(F, OpenDialog1.Filename); Reset(F); while not Eof(F) do begin Readln(F, lStr); Do_Auswerten(lStr); end;
Delphi-Quellcode:
Diese Variante hat jedoch den Nachteil, dass die Datei erstmal komplett in den RAM geladen werden muss.
lStringList:= TStringList.create;
try lStringList.LoadFromFile(OpenDialog1.FileName, TEncoding.UTF8); for i:= 0 to StringList.count-1 do begin Do_Auswerten(lStringList[i]); end; finally lStringList.free end; Gibt es auch eine Variante eine UTF8-Datei zeilenweise auszuwerten ohne sie komplett in den RAM zu laden? [edit=SirThornberry]Titel geändert - Mfg, SirThornberry[/edit] |
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Ja, indem du selbst mit TFileStream arbeitest und die Textdatei "häppchenweise" einlist und nach CRLF untersuchst.
|
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Delphi-Quellcode:
Diese alten "Pascal"-Funktionen arbeiten, auch unter D2009/2010, immer nur mit ANSI (oder notfalls anderen Single-Byte-Codierungen), selbt wenn man ihnen einen String/WideString/UnicodeString übergibt.
F: TextFile;
aStr: RawByteString; //lStr: String; ... AssignFile(F, OpenDialog1.Filename); Reset(F); while not Eof(F) do begin ReadLn(F, aStr); //lStr := Utf8Decode(aStr); //Do_Auswerten(lStr); Do_Auswerten(Utf8Decode(aStr)); end; |
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Zitat:
das CRLF ist doch von UTF8 nicht betroffen oder? Gruß K-H |
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Zitat:
Zitat:
|
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Danke für die Antworten.
TFileStream ist wohl die Alternative. |
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
TFileStream + TStringStream könnte auch hilfreich sein.
|
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
lStringStream.LoadFromFile() ist aber keine Alternative, da auch hier die komplette Datei geladen wird.
Folgendes funktioniert:
Delphi-Quellcode:
F: TextFile;
lStr: string; ... AssignFile(F, OpenDialog1.Filename); Reset(F); while not Eof(F) do begin Readln(F, lStr); lStr:= UTF8ToWideString(lStr); Do_Auswerten(lStr); end; |
Re: UTF8 - Grosse csv-Datei Zeilenweise lesen
Zitat:
|
Re: UTF8 - Große csv-Datei Zeilenweise lesen
Ups, ich dachte man kann dem StringStream auch einen anderen Stream übergeben, aber da hatte ich wohl was werwechselt ... mal sehn, wenn ich ein bissl aufgeräumt hab, dann lade ich meine Klasse vielleicht hoch.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz