![]() |
Zeilenendezeichen?
Hallo,
irgendwie steh' ich gerade auf'm Schlauch. Ich habe eine Datei, die am Ende jeder Zeile nur $0A hat und nicht $0D $0A. Wie kann ich diese Datei zeilenweise einlesen? Ich benötige die Zeilen einzeln, weil ich dann entscheiden muß, was mit der Zeile geschehen soll. Vielen Dank, em-sigma |
Re: Zeilenendezeichen?
Wenn das eine einmalige Sache ist, kannst Du sie mit Wordpad öffnen und erneut abspeichern. Programmatisch hingegen könntest Du sie z.B. in eine TStringlist laden und mit StringReplace alle #10 durch sLineBreak ersetzen.
|
Re: Zeilenendezeichen?
Hallo DeddyH,
leider ist es keine einmalige Sache, sondern muß täglich passieren und die ursprüngliche Datei ist relativ groß (etwa 1,2 GByte) und enthält mehrere 100 000 Zeilen. Schafft eine tStringList das? Oder gibt's 'ne einfachere Lösung? Vielen Dank, em-sigma |
Re: Zeilenendezeichen?
![]() ( ![]() |
Re: Zeilenendezeichen?
Ist so ne grosse Datei nicht perfekt fuer deine
![]() (Warum liegt die eigentlich noch unter Klatsch & Tratsch?) |
Re: Zeilenendezeichen?
Zitat:
(OK, und sie läuft noch nicht 100%ig so, wie ich's mir wünsche) Aber wenn ihm der Text-Parser ausreicht ... dann ja [edit] em-sigmas Post #3 war mir vorhin noch garnicht aufgefallen. Nee, eine TStringList würde diese Daten zwar fast reinbekommen, aber die Lade- und Speichermethoden würden nochmal mindestens genausoviel Speicher benötigen, da sie die Datei erstmal komplett in den RAM laden (ab Delphi 2009 auch nochmal umcodieren/umkopieren) und erst dann parsen und in die Liste eintragen. |
Re: Zeilenendezeichen?
Kann man da vll sowas wie TFilestream nehmen und dan häppchenweise einlesen und entsprechend auf das #10 reagieren? Oder lädt der Filestream auch alles erst in den Speicher?
|
Re: Zeilenendezeichen?
TFileStream stream ordnungsgemaess von Platte, TMemoryStream laedt alles in den Speicher.
Aber das selbst rauslesen ist aufwaendiger, da man eigentlich auf alle Umbrueche reagieren sollte, und nicht nur auf #10. Ich denke mal ReadLn ist hier noch am besten (oder himitsu's TFileStringList). |
Re: Zeilenendezeichen?
Mit der
![]() Aber diese Klasse war eigentlich mehr zum Editieren gedacht und auch nicht unbedingt sehr ausgereift/optimiert. Die TFileStringList ist, wie gesagt noch nicht ganz fertig, aber den Parser (hatte ich auf der Stringlist rausgenommen, da er langsam zu groß wurde) wäre schon verwendbar. dieser wäre praktisch sowas wie das AppendFile+Reset+ReadLn, nur daß er ein paar Dinge mehr kann. ![]() einfaches zeilenweises Auslesen ginge z.B. so:
Delphi-Quellcode:
Und es werden natürlich alle Zeilenumbrüche erkannt #13#10 (Windows), #10 (Unix/Linux) und #13 (Macintosh).
F := TTextStream.Create('Datei.txt', saRead);
Try While F.ReadLine do Begin S := F.ReadLn; ShowMessage(Format('%d. Zeile = "%s"', [F.Processed, S])); End; Finally F.Free; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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