AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilenendezeichen?

Ein Thema von em-sigma · begonnen am 2. Jun 2010 · letzter Beitrag vom 2. Jun 2010
Antwort Antwort
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 12 Athens
 
#1

Zeilenendezeichen?

  Alt 2. Jun 2010, 10:23
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
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 10:30
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 12 Athens
 
#3

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 10:36
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
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 10:46
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 )
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#5

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 16:36
Ist so ne grosse Datei nicht perfekt fuer deine TFileStringList, himitsu?
(Warum liegt die eigentlich noch unter Klatsch & Tratsch?)
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 16:53
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.
$2B or not $2B
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#7

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 17:15
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?
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#8

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 17:32
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).
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zeilenendezeichen?

  Alt 2. Jun 2010, 19:20
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).
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:54 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