AGB  ·  Datenschutz  ·  Impressum  







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

TextFile Zeile suchen

Ein Thema von mimi · begonnen am 18. Okt 2005 · letzter Beitrag vom 30. Okt 2005
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: TextFile Zeile suchen

  Alt 23. Okt 2005, 08:38
Wenn du in einem TFileString in eine bestimmte Zeile springen willst, dann schreib Dir einfach eine Funktion, die das macht:
Delphi-Quellcode:
Procedure SeekText (aTextStream : TStream; aRow, aCol : Integer); // aRow = Zeile>0, aCol = Spalte > 0
Const
  szCRLF = #13#10;

Var
  iRow, j : Integer;

  Function NextChar : Char;
  Begin
    aTextStream.Read (Result,1)
  End;

Begin
  aTextStream.Seek (0, soFromBeginning);
  iRow := 1;
  j:=1;
  While aRow<>iRow Do
    if NextChar = szCRLF[j] Then Begin
      inc(j);
      if j>Length (szCRLF) Then begin
        j:=1;
        inc(iRow);
        End
      End
    Else
      j := 1;

  // Aktuelle Position der Streamposition ist das erste Zeichen der aRow.ten Zeile
  // Jetzt nur noch zur ensprechenden Zeile Springen
  For j:=1 to aCol-1 do NextChar;
End;
Ich habe das nicht getestet, kann also sein, das hier massig Fehler drin sind, aber im Prinzip gehts so:
Ich fange am Anfang an und zähle jedesmal, wenn ich auf ein #13#10 (CR + LF) stosse, eins zu einem internen Zeilenzähler, bis die gewünschte Zeile gefunden wurde. Dann gehe ich noch 'aCol-1' Zeichen nach rechts und dann befindet sich die Streamposition genau auf der gewünschten Position. Der Nachteil ist, das das nicht sonderlich schnell ist, wenn Du die Routine mehrmals aufrufst, weil immer von Vorne angefangen wird. Das kann man natürlich optimieren, indem man eine Klasse schreibt, die sich die aktuelle Position (Zeile/Spalte) merkt und von da aus relativ wandert. Dann kann man, vermutlich sehr schnell, von Zeile zu Zeile hüpfen.

Hier, bei den den Schwyzern, findest Du eine Funktion, die eine bestimmte Zeile auslesen kann.

Was willst Du denn genau? Was suchst Du in 40-50MB grossen Textdateien?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


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 01:00 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