Beim Dateilesen Zeilen überspringen via Dateipos. zeiger?
-
Hi,
ich muss aus einer Datei grössere Datenmengen auslesen. Dabei hätte ich mir ein paar methoden geschrieben um in bestimmte Zeilen zu springen. Gibt es eine Möglichkeit in einer Datei einfach zeilen zu überspringen?
-
Wenn jede Zeile gleich viel zeichen hätte wäre es einfach,
wenn dem nicht so ist, musst du wissen wo deine Zeile zu der
du willst, in der Datei anfängt, um direkt dorthin zu springen.
Oder mit Getline die zeilen einlesen, aber nicht verarbeiten.Devil
-
Zeilen sind leider nicht gleichlang ;o(. Ich will halt einfach nur in die 1000ste oder 4567 Zeile springen können aber ich glaub das ist dann net so einfach
-
Ich will halt einfach nur in die 1000ste oder 4567 Zeile springen können aber ich glaub das ist dann net so einfach
In der Tat. Dateien sind nun mal nicht Zeilen- sondern Zeichenbasiert. Wenn du also in die 7678te Zeile der Datei willst, dann bleibt dir nichts anderes übrig, als 7677 mal nach dem Zeilentrenner deiner Wahl zu suchen. Sprich: Du musst die Zeichen bis dahin lesen.
-
Solltest Du das für die gleiche Datei öfter benötigen, solltest Du eine 2. Indexdatei erstellen, in der stehen dann nur die Startpositionen der Zeilen. Dieser Index ist dann gleich lang und damit auch schnell positionierbar.
Den Index kannst Du z.B. auch beim Schreiben erzeugen. Ist eine Frage der Häufigkeit, ob sich das lohnt (ist aber ziemlich schnell lösbar).
-
hmm leider werden die Dateien nur 1x für eine Auswertung gebraucht und das wars dann also index rentiert sich net.
-
Wenn DU sie für eine einmalige Auswertung brauchst, dann musst Du doch auch jedesmal irgendetwas "loopen", um diese Datei schreiben zu können.
Also solltest Du in Deinem "Analyse"-Teil nicht nur die Erbenisdatei, sondern parallel die Indexdatei erstellen. Machst due die Zeilen der Indexdatei alle gleichlang.. voila
-
nö ich lese nur die daten ich schreibe sie nicht. Ich lese die Datei momentan zeilenweise ein. Jede Zeile wird analysiert und die Daten dann in einem Vektor gespeichert
-
Jason_Frost schrieb:
Jede Zeile wird analysiert und die Daten dann in einem Vektor gespeichert
Woher weißt DU denn vor dem Analysieren, ob Du ne Zeile überspringen willst? Wenn Du vorher NICHT den Inhalt (i.e Übereinstimmung mit Deinen Kriterien) weißt, ist es doch völiig wurscht, ob Du gleichlange Zeilen hast oder nicht: Überspringen darfst Du in diesem Fall nicht!
Es sei denn, DU gehts das Ganze zweimal durch, und dann schreibste die Dateioffsets aller relevanten Zeilen in ne Referenz-Datei ( siehe früher Antworten )
-
Alternativ könnte man beim Speichern jede Zeile mit Dummyzeichen auffüllen, die beim Laden rausgefiltert werden...
Nicht sehr performant und auch vergrößert die Datei ggf. immens, aber dafür... einfach