File durchsuchen



  • Hallo zusammen,

    ich muss ein File einlesen und dieses durchsuchen nach einem gewissen String, wie mach ich das am besten? Wie kann ich ein ganzes Textfile einlesen? Ich muss sowas wie TIniFile machen aber die Datei hat ein bisschen ein anderes Format als die Ini Dateien:
    ; ============================================
    ; Kommentar am Beginn des Files
    ; ============================================
    ;
    #Section
    Name=Value
    ...
    ...
    🙄



  • Wie gross werden die Files voraussichtlich? Entweder Alles in den Speicher laden und parsen oder bruchstücke in den Speicher laden und auswerten... was anderes gibts da ned... Ausser vielleicht noch Memory Mapped Files, das wäre dann aber WinAPI. Da kriegst du nen normalen Zeiger zurück, mit dem du im File navigieren kannst, als wärs im Speicher. Um das Caching kümmert sich das OS.

    -junix



  • HI erstmal!

    ich möchte auch so etwas machen!!! Eine datei auslesn lassen!!

    Die .txt Dateien haben aber locker die größe von 600 000 Zeilen, oder mehr! ( also auch locker 80MB groß)

    Wisst ihr eine Möglichkeit wie man diese "schnell" einlesen kann?????

    SEF



  • SEF schrieb:

    Wisst ihr eine Möglichkeit wie man diese "schnell" einlesen kann?????

    Siehe Oben: Memory Mapped Files... Ist betriebssystemabhängig und meines Wissens gibts keine Kapselung dazu in der VCL... also bitte im entsprechenden Betriebssystem-Forum um Details nachfragen... wobeis in den jeweiligen Foren sich den Einen oder Anderen Beitrag dazu schon gibt.

    -junix



  • Die Files sind so in der Grösse von 4 KB-6 KB. 👍



  • roN schrieb:

    Die Files sind so in der Grösse von 4 KB-6 KB. 👍

    Na dann würde ich die einfach in einen Puffer laden und mit nromalen String-Funktionen verarbeiten...

    -junix



  • mmhh........
    ich hab da ein Programm in VB geschrieben und da hab ich eine Möglichkeit gefunden das zu "verschneller"! aber das dauert mir noch zulange!!(also bei 600 000 zeilen so um die 10 minuten!!!)

    Und da wollte ich nur wissen ob es in C/C++ auch so eine Möglichkeit gibt??



  • Hast du überhaupt gelesen was ich geschrieben hatte?

    -junix



  • Okay, kann ich den mit STL das Fil so öffnen das ich lese- UND schreib-Zugriff auf das File habe? Mit ofstream hab' ich doch nur schreib Zugriff... oder?



  • Klar doch... siehe Thread den ich verschoben habe. fstream ist das Mittel der Wahl.

    -junix



  • mmhh.... ja ich schau mal! und bastel ein bischen rum!!!!!

    Und als ich angefangen habe zu posten war dein Beitrag noch nich da @junix

    also danke an euch!

    SEF



  • Ich hab' jetzt mal versucht, das File so auszulesen:

    char c;
    AnsiString test_AS;
      while (Stream_prvt.good())     // loop while extraction from file is possible
      {
        Stream_prvt.get(c);       // get character from file
        test_AS+=c;
      }
    

    aber so steht irgendwie nichts in test_AS... Warum? Kann da jemaand helfen? Danke! 😞



  • Wieso so umständlich und langsam? Wieso nicht mit new char[filesize] ein char-array erzeugen und mit fstream::read in einem Zug einlesen? Das geht erheblich schneller.

    -junix



  • stimmt eigentlich, jetzt hab ich's so gelöst:

    char *File_ch = new char[10240];
    
    Stream_prvt.read(File_ch,10240);       // get ganzes File
    
    Stream_prvt << "#" << Section.c_str() << "\n";
    delete File_ch; File_ch=NULL;
    

    So steht aber was ganz komisches in File_ch und sowiso, kann ich die Grösse so gross angeben wie das File ist?



  • fstream::seek zum ende und dann fstream::tell. Damit weisst du die Grösse. Ausserdem solltest du den Allokierten Puffer mit memset() vielleicht noch erst auf 0 initialisieren.

    -junix



  • Hier gehts weiter bezüglich fstream:
    http://c-plusplus.net/forum/viewtopic.php?t=51104

    -junix


Anmelden zum Antworten