Filehandling mit Dateien >5MB



  • Hi,
    1. Ich habe eine Datei, die nach Schlüsselwörtern zu durchsuchen ist.
    2. Dann müssen diese Schlüssel ausgewertet werden.
    Bis hierher ist auch noch alles ok.

    Jetzt kommt das Problem:
    Ich brauche mehrer handles auf die gleiche Datei, um ein "springen" in der Datei zu realisieren. Bisher habe ich dann einfach rewind genommen und mich von oben wieder durch gearbeitet. Nun haben Dateien mit 5MB so um die 100.000 Zeilen und da ist dieser Weg nicht gerade schnell.

    Wie könnte ich mir nun mehrer handles halten, die ungefähr so funktionieren:
    - aktueller handle //zum auslesen der Datei
    - stack von handles //zum speichern bei verzweigungen
    - liste von handles //zum halten wichtiger Punkte

    Die Datenstrukturen bekomme ich noch selber hin, nur die handles machen mir Probleme.

    DANKE



  • Hi, 🙄

    ich weis zwar net ob das wirklich schneller ist, aber ich denke meine Methode ist viel schneller als Deine 🙂

    - Du lädst die ganze Datei in den Speicher
    - und jagst dann durch den Speicher nach Deinem Schlüssel.
    - Speicher wieder leeren 🙂

    Denn für jede Struktur/Handle durch ne Datei zu jagen, sie immer und immer wieder zu öffnen/schließen ist bestimmt lamer als wenn Du sie direkt in den Speicher lädst 🙂

    Ich hoffe ich konnte Dir paar Denkanregungen geben 🙂

    Tschüüüs, 🙂
    Patrick



  • Ich dachte, da es sich um Pointer auf die Datei handelt, könnte ich mir die einfach kopieren und dann halt in einer einmal geöffneten Datei zu beliebigen Stellen springen.



  • Also die Pointer-sache funzt bei mir nicht. 😡
    Ich zeig jetzt mal den Quelltext, vielleicht sieht jemand den Fehler und hat ne Lösung.

    FILE *stream1,*stream2;
    	stream1=fopen("testfile.txt","rt");
    	stream2=stream1;
    	char text[100];
    	fgets(text,10,stream2);
    	cout<<text<<endl;
    	fgets(text,10,stream1);
    	cout<<text<<endl;
    	fclose(stream1);
    

    Die Datei testfile.txt enthält in jeder Zeile eine Zahl.
    (0\n1\n2\n3\n...)

    Das Programm liefert die Ausgabe
    0
    1

    Ich hätte aber gern:
    0
    0



  • Woher soll fgets wissen, dass du das Handle kopiert hast? Wie der Pointer heißt, der auf das FILE zeigt, kann und darf fgets nicht wissen.



  • Ich habe noch ne Lösung gefunden, mit _dup, _dup2 kann mann sich noch nen neuen handle holen.
    Ich habe mich an Patrick's Vorschlag abgewandelt und die Datei Auszugsweise in den Speicher geladen und ausgewertet.


Anmelden zum Antworten