Für Fall 2 gibt es mehrere mögliche Lösungen:
1.) Falls die Datei nicht allzu groß ist, könntest Du sie komplett in eine Stringliste einlesen (Methode LoadFromFile) und anschließend die nicht benötigten Zeilen löschen.
Da dies nur zeilenweise möglich ist, könnte es durch die zahlreichen Stringoperationen schnell zu größeren Laufzeiten kommen.
2.) Alternativ zur Stringliste kannst Du die Datei auch in einen String einlesen (wie in marabus Beispiel). In diesem String suchst Du den n-ten Zeilenvorschub (n = Startzeile - 1). Als Suchfunktion bietet sich z.B.
GetPosNumX aus der
DP an. Da die Länge des gewünschten Bereichs ja bekannt ist, kannst Du diesen schließlich über die Copy-Funktion extrahieren und der Stringliste zuweisen.
3.) Bei sehr großen Textdateien mußt Du möglicherweise blockweise vorgehen. Dazu wird die Datei als FileStream geöffnet, aus dem immer wieder ein Block (z.B. 16 KByte) in einen Puffer geladen wird. In jedem geladenen Block zählst Du die Zeilenvorschübe. Laden und Zählen wiederholst Du so lange, bis Du den gewünschten Zeilenvorschub gefunden hast; problematisch wird es dabei nur dann, wenn sich der Zeilenvorschub auf zwei Blöcke verteilt. Aus der Fundstelle und der Anzahl der gelesenen Blöcke kannst Du schließlich die absolute Position des Zeilenvorschubs in der Datei errechnen und mit der von marabu beschriebenen Lösung den gewünschten Bereich einlesen.
Für die meisten Dateien dürfte wohl die zweite Lösung die beste sein.
Gruß Hawkeye