File einbinden



  • Also wenn wir davon ausgehen das bei den char-Teilen nur bestimmte Zeichen erlaubt sind (a-zA-Z0-9.,- etc.), dann könntest du leicht die Textdateien alle einlesen und diese parallel durchgehen.

    In etwa so (nur so hingeschrieben, kein korrektes C++):

    typedef vector<string> file;
    struct scanpos{
      int txt_pos;
      char *bin_pos;  
    };
    
    vector< file > files;
    vector< scanpos > scan;
    char *bin_file;
    
    // ... einlesen ...
    
    // für jede txt-datei
    // ... für jede zeile in txt zeile
    // ... ... typ auslesen, länge des binären parts auslesen
    // ... ... mit bin vergleichen, im erlaubten rahmen?
    // ... ... wenn nicht, nächste testen
    // ... ... sonst zeiger vorrücken (txt_pos++, bin_pos += length)
    


  • hm ich glaube wir reden aneinander vorbei.
    Irgendwie spinnt RS gerade bei mir sonst hätte ich mal ein Beispiel file geuppt.

    Ich werd mal schaun das ich das hinbekomm dann geht das ganze leichter zu beschreiben.



  • Ah, okay.

    Du lädst also eine Binärdatei und anhand der ersten beiden Informationen wird bestimmt wie der Rest aussieht (was hier egal ist). Dies steht in diversen Textdateien, die man an sich dann angeben muss, wenn man eine Binärdatei angibt.

    Nun hast du aber sagen wir mal die Standard-Beschreibungsdateien schon und willst diese automatisch durchgehen lassen, damit du nicht jedesmal eine Textdatei angeben musst.

    In dem Fall wäre es wohl am einfachsten diese als stumpfe Textdatei in einem extra Ordner liegen zu haben. Diese werden bei jeden Laden einer Binärdatei nacheinander durchgegangen und die richtige rausgesucht...

    Ist zB 8BAC0124.000-1 das was dann in der Binärdatei an der Stelle der order_id steht? Wenn ja, dann reicht es ja aus der Binärdatei die beiden wichtigen Werte auszulesen und dann von den Textdateien die ersten beiden Zeilen einzulesen und mit dem Wert, umgeben von "" per find zu vergleichen.



  • [url]http://rapidshare.com/files/138234465/Daten.zip[url]

    Ja genau so sollte es glaub ich sein^^

    Mein problem dabei ist wie ich mittels der order_id z.B
    8BAC0124.000-1 die Textdatei mit dem vollen Namen:8BAC0122.000-1_V0.2.txt
    öffnen kann.
    Die Versionsnummer des Textfiles und somit der Name kann sich leicht ändern und sollte deshalb nicht im Code sein.



  • Hi
    Du könntest alle Dateien in dem Ordner in eine Liste einspeichern und dann nur die ersten X Zeichen vergleichen.



  • Vielen Dank habt mir schon sehr geholfen

    Hab jetzt noch eine kleine Frage.
    Ich bekomme einen String.
    In diesem String steht welches Array verwendet werden muss.

    z.B: im String steht xyz
    Das Array xyz wird verwendet

    ist dies auch irgend wie ohne switch/case abfragen möglich?

    mfg



  • Wenn die Möglichkeiten feststehen, kannst du dies über eine map regeln. Key wäre der String und der Wert ein Pointer auf das jeweilige Array.



  • hört sich gut an
    Kannst mir nen link oder so geben wo das mit der map erklärt wird.
    Hab noch nie was davon gehörht^^

    danke



  • http://www.cppreference.com/cppmap/index.html

    Läßt sich im Grunde wie jeder andere Container auch verwenden.

    edit: zB:

    #include <map>
    #include <string>
    
    // ...
    
    std::map< std::string, int* > myMap;
    myMap["abc"] = array1;
    myMap["bcd"] = array2;
    
    // ...
    
    if (myMap[eingelesenerString]){
      int* jetzigerArray = myMap[eingelesenerString];
    }
    


  • Ist es möglich alle Files aus einem Ordner zu includen? ohne die einzelnen Filename zu wissen.
    Ich habe in einem Includefile eine char array dessen Name mir nur durch den Inhalt eines Strings bekannt ist,
    kann ich irgend wie auf das array zugreifen?

    Man hat in einem Ordner verschiedene Textfiles z.B:

    test001_V1.3
    test002_V0.3
    ...

    In meine Programm erhalte ich einen String test001.
    Ist es irgend wie möglich ohne den vollen Filenamen zu wissen es zu öffnen?
    bzw. eine Art Wildecard suche durchzuführen?

    MFG und Vielen Dank

    Reinhard


Anmelden zum Antworten