Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Textdatei Zeile für Zeile auslesen, bis zum Ende (https://www.delphipraxis.net/89257-textdatei-zeile-fuer-zeile-auslesen-bis-zum-ende.html)

BillieJoe90 28. Mär 2007 15:30


Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Hallo,
ich würde gerne eine Datei auslesen, und zwar Zeile für Zeile. Es handelt sich um eine m3u-Datei. Theroretisch kann ich mir vorstellen, wie es funktioniert:
While-Schleife, in der ReadLn aufgerufen wird, bis der Dateizeiger am Ende ist.
Quasi:
Delphi-Quellcode:
while DateiZeiger nicht am Ende do begin
  ReadLn(...);
  ReadLn(...);
end;
(Da es eine erweiterte m3u-Datei ist, muss ich pro Durchlauf 2 Zeilen auslesen)

Aber wie sieht das in Delphi-Code aus?

Danke schonmal!

Johannes

Hawkeye219 28. Mär 2007 15:43

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Hallo Johannes,

hilft dir diese Seite?

Gruß Hawkeye

BillieJoe90 28. Mär 2007 15:49

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Zitat:

Zitat von Hawkeye219
Hallo Johannes,

hilft dir diese Seite?

Gruß Hawkeye

Vielen vielen Dank, ja! :)

Kann den Beitrag jemand verschieben? Ich habe mich auf der Anfangs-Saeite wohl verklickt, sollte in "Object Pascal/Delphi Language" sein :oops: Danke!

Der_Unwissende 28. Mär 2007 15:51

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Zitat:

Zitat von BillieJoe90
Hallo,
ich würde gerne eine Datei auslesen, und zwar Zeile für Zeile. Es handelt sich um eine m3u-Datei. Theroretisch kann ich mir vorstellen, wie es funktioniert:
While-Schleife, in der ReadLn aufgerufen wird, bis der Dateizeiger am Ende ist.
Quasi:
Delphi-Quellcode:
while DateiZeiger nicht am Ende do begin
  ReadLn(...);
  ReadLn(...);
end;

Schau mal in nach Delphi-Referenz durchsuchenEOF, das ist der Dateiende-Zeiger. Allerdings ist es eher unüblich noch auf diese Funktionen zurück zu greifen. In der Regel öffnet man Dateien eher als Stream (damit kannst Du weiter von Inhalt und Speicherort abstrahieren).
Willst Du mit einer Textdatei arbeiten bietet sich zudem die TStringList an. Diese liest für Dich eine Datei in eine Liste ein. Die Anzahl der Zeilen kannst Du mit der Eigenschaft Count ermitteln, auf einzelne Zeilen kannst Du mit der Eigenschaft Items[i] zugreifen (kannst auch [i] direkt an die Instanz anhängen, ist die Standardeigenschaft).

Delphi-Quellcode:
var s: TStringList;
    blubb: String;
    i: Integer;
begin
  s := TStringList.Create;
  s.LoadFromFile(DATEI_NAME);

  for i := 0 to s.count - 1 do
  begin
    blubb := s[i];
   
    // mach irgendwas mit blubb
  end; // for i := 0 to s.Count - 1
end;
Du kannst natürlich auch die Zeilen verändern und/oder neue hinzufügen. Um die Datei wieder zu Speichern steht Dir dann die Methode saveToFile zur Verfügung.

Gruß Der Unwissende

[edit]
Ich könnte schwören, dass es einst einen roten Kasten gab, der war, hm, rot!
[/edit]

BillieJoe90 28. Mär 2007 15:55

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Ja, die Methode mit der StringList war mir bekannt, ich hielt sie aber für, wie soll ich sagen, "unsauber"... :?

SirThornberry 28. Mär 2007 16:04

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Die Stringlist-Variante hat den Nachteil das die gesamte Datei in den Speicher geladen wird.

Der_Unwissende 28. Mär 2007 18:11

Re: Textdatei Zeile für Zeile auslesen, bis zum Ende
 
Zitat:

Zitat von SirThornberry
Die Stringlist-Variante hat den Nachteil das die gesamte Datei in den Speicher geladen wird.

Klar, andererseits hält sich die Größe einer m3u-Datei warscheinlich in Grenzen, oder? Kann man natürlich nicht drauf spekulieren und natürlich ist das ein klarer Nachteil! Aber wie wird denn weiter mit den Daten gearbeitet? Da würde ich schätzen landet ein großer Teil 1:1 im Hauptspeicher.

Das verwenden von AssignFile, Readln usw. hat natürlich auch ein paar Nachteile, glaube mich dunkel zu erinnern, dass jmd. mal beschrieben hat, dass diese Zugriffe nur auf eine Schicht umgeleitet werden, die selbst wieder auf Streams zurück greift. Aber da bin ich mir nicht mehr 100%ig sicher.
Ich würde jedenfalls am ehesten zum FileStream (oder allgemein zum Stream) raten.

Gruß Der Unwissende


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