Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeilenendezeichen? (https://www.delphipraxis.net/151803-zeilenendezeichen.html)

em-sigma 2. Jun 2010 09:23


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

DeddyH 2. Jun 2010 09:30

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.

em-sigma 2. Jun 2010 09:36

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

himitsu 2. Jun 2010 09:46

Re: Zeilenendezeichen?
 
Delphi-Referenz durchsuchenReadLn und TStrings/TStringList, sowie alle .LoadFromFile und .Text von mehrzeiligen Komponenten/Klassen in Delphi können damit umgehn.
( http://www.delphipraxis.net/internal...157168#1157168 )

H4ndy 2. Jun 2010 15:36

Re: Zeilenendezeichen?
 
Ist so ne grosse Datei nicht perfekt fuer deine TFileStringList, himitsu? :)
(Warum liegt die eigentlich noch unter Klatsch & Tratsch?)

himitsu 2. Jun 2010 15:53

Re: Zeilenendezeichen?
 
Zitat:

(Warum liegt die eigentlich noch unter Klatsch & Tratsch?)
Ich wurde von RegExen, 'ner himXML-Überarbeitung und einem M-Cratator aufgehalten.
(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.

kaiser1401 2. Jun 2010 16:15

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?

H4ndy 2. Jun 2010 16:32

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).

himitsu 2. Jun 2010 18:20

Re: Zeilenendezeichen?
 
Mit der PartialTextfile könnte man die Datei auch stückchenweise einlesen und hätte diese Stückchen dann in einer kleinen TStringList innerhalb der Klasse.
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.
www.delphipraxis.net/topic177785.html

einfaches zeilenweises Auslesen ginge z.B. so:
Delphi-Quellcode:
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;
Und es werden natürlich alle Zeilenumbrüche erkannt #13#10 (Windows), #10 (Unix/Linux) und #13 (Macintosh).


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 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