AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi UTF8 - Große csv-Datei Zeilenweise lesen

UTF8 - Große csv-Datei Zeilenweise lesen

Ein Thema von Pfaffe2 · begonnen am 30. Mär 2010 · letzter Beitrag vom 30. Mär 2010
Antwort Antwort
Pfaffe2

Registriert seit: 11. Feb 2010
23 Beiträge
 
Delphi XE Professional
 
#1

UTF8 - Große csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 08:20
Delphi 2009

Früher konnte man mit folgender Varaiante eine Textdatei zeilenweise lesen, jedoch funktioniert das nicht mit UTF8 kodierten Dateien:
Delphi-Quellcode:
F: TextFile;
lStr: string;
...
AssignFile(F, OpenDialog1.Filename);
Reset(F);
while not Eof(F) do begin
  Readln(F, lStr);
  Do_Auswerten(lStr);
end;
OK mit Hilfe einer Stringliste kann ich die UTF8 Daten laden und auswerten:
Delphi-Quellcode:
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;
Diese Variante hat jedoch den Nachteil, dass die Datei erstmal komplett in den RAM geladen werden muss.

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]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 08:34
Ja, indem du selbst mit TFileStream arbeitest und die Textdatei "häppchenweise" einlist und nach CRLF untersuchst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 08:54
Delphi-Quellcode:
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;
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 09:40
Zitat von Pfaffe2:
Früher konnte man mit folgender Varaiante eine Textdatei zeilenweise lesen, jedoch funktioniert das nicht mit UTF8 kodierten Dateien:
Was funktioniert denn da nicht?
das CRLF ist doch von UTF8 nicht betroffen oder?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 09:44
Zitat von p80286:
Was funktioniert denn da nicht?
Delphi dekodiert das nur nicht automatisch

Zitat von p80286:
das CRLF ist doch von UTF8 nicht betroffen oder?
Die bekannten Steuercodes #0 bis #31 liegen ja unterhalb von #128 (im 7-Bit-Bereich) und werden nicht umcodiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pfaffe2

Registriert seit: 11. Feb 2010
23 Beiträge
 
Delphi XE Professional
 
#6

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 09:49
Danke für die Antworten.
TFileStream ist wohl die Alternative.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 09:52
TFileStream + TStringStream könnte auch hilfreich sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pfaffe2

Registriert seit: 11. Feb 2010
23 Beiträge
 
Delphi XE Professional
 
#8

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 15:12
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: UTF8 - Grosse csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 15:18
Zitat von Pfaffe2:
lStringStream.LoadFromFile()
Du kannst ja auch einen Filstream nehmen und anstelle die Datei in einem Rutsch komplett einzulesen liest du sie (wie bereits von anderen erwähnt) Stückchenweise ein bis ein Zeilenumbruch kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: UTF8 - Große csv-Datei Zeilenweise lesen

  Alt 30. Mär 2010, 16:19
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.
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 03:27 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