Wie andere angemerkt haben, wenn Sie nicht die Linien der festen Breite haben, ist es unmöglich, ohne den Index zu bauen. Wenn Sie jedoch das Format der Datei kontrollieren, können Sie beim Suchen der Startlinie eine ~ 0 (Protokoll (Größe)) anstelle von 0 (Größe) Leistung erhalten, wenn Sie es schaffen, die Nummer der Zeile selbst zu speichern jede Zeile, dh den Inhalt der Datei in etwa so aussehen haben:
1: val1, val2, val3
2: val4
3: val5, val6
4: val7, val8, val9, val10
mit diesem Format der Datei, können Sie schnell die benötigte Zeile für binäre Suche finden: fahren Sie in die Mitte der Datei mit der Suche nach. Lesen Sie bis zum nächsten Zeilenumbruch. Lesen Sie dann die Zeile und parsen Sie die Nummer. Wenn die Anzahl größer als das Ziel ist, müssen Sie den Algorithmus in der ersten Hälfte der Datei wiederholen, wenn er kleiner als die Zielzeilennummer ist, dann müssen Sie ihn in der zweiten Hälfte der Datei wiederholen.
Sie müssen auf die Eckfälle achten (zB: Ihr "Anfang" des Bereichs und "Ende" des Bereichs sind auf der gleichen Linie, etc.), aber für mich funktionierte dieser Ansatz ausgezeichnet die Vergangenheit für die Analyse der Logdateien, die das Datum darin hatten (und ich musste die Linien finden, die zwischen den bestimmten Zeitstempeln sind).
Natürlich schlägt dies noch nicht die Leistung des explizit gebauten Index oder der Datensätze fester Größe.
Ich habe es in Fortran gesehen, wir mussten eine Datei von einem Datenzähler (2 Millionen Zeilen) lesen. Also ich bin zuversichtlich, dass es machbar ist – dassouki