In CSV Datei springen



  • Guten Tag 🙂

    ich öffne in meinem programm einen ifstream und öffne damit eine datei ...

    ifstream file("C:\datei.csv");
    

    diese datei ist wie folgt aufgebaut:
    a;1
    b;2
    c;3
    d;4
    .
    .
    .
    zzzzzzz;1000000000

    jetzt würde ich gerne in meinem prgramm die möglichkeit haben zB an stelle 10000000 zu springen und ab da die nächsten zeilen auszugeben ...
    gibt es eine möglich zu springen???



  • Mit ifstream::seekg kannst du innerhalb einer Datei springen,
    mit ifstream::tellg kannst du die aktuelle Position wieder abfragen.
    Allerdings sind das Byte-Positionen, das heißt, du musst bereits wissen,
    an welcher Stelle deine Zeile 1000000 sich z.B. befindet.
    Da aber Zeilen keine konstante Länge haben, hast du keine Möglichkeit das einfach zu berechnen.
    Du wirst also nicht darum herumkommen, die ganze Datei nacheinander zu lesen und dabei die Zeilenumbrüche zu zählen.
    So findest du dann die entsprechende Zeile.

    Eventuell wäre eine Lösung, dass du beim ersten öffnen durch die komplette Datei wanderst und die Zeilenposition dabei in ein Feld speicherst.
    Dann könntest du bei späteren Zugriffen direkt an die Byte-Positionen springen.

    Ob das wiederum sinnvoll ist, kommt ganz auf die Anwendung an.



  • okay vielen dank für die schnelle antwort dann werde ich mir wohl oder übel eine anderes konzept ausdenken müssen -.-



  • Wenn ich es richtig verstanden habe steht die Position in der Zeile und jede Zeile erhöht die Position um 1. Du könntest Dich jetzt in einer binären Suche zur gewünschten Stelle bewegen, indem du immer in die mitte springst, guckst bei welcher Position du gelandet bist und dann entscheidest ob du nach vorne oder zurückspringst.
    Wenn die Datei nicht riesig ist, wär es aber wohl das einfachste die Daten auf einen Rutsch erstmal in einen vector zu schreiben und das ganze im Speicher zu machen.



  • Welche Daten stehen am Zeilenanfang?



  • guckst Du hier


Log in to reply