File auslesen und vergleichen



  • Hmm, hab gerade nachgeschaut, was es mit std::map auf sich hat.
    Ich könnte damit also sowohl die Bezeichnung wie "myDir" als auch den dazugehörigen Wert wie "c:\myDir" als ein Paar einlesen, ist das korrekt?

    So weit so gut. Allerdings werden die unterschiedlichen Werte im Programm unterschiedlich gehandhabt (z.B. suche im Verz. myDir nach der Datei myFile, lese myFile, bis xyz gefunden, mach dann was und lese bis abc weiter). Mir ist nicht ganz klar, wie ich dann weiter vorgehen kann 😕, denn die Reihenfolge der einzelnen Daten in der Datei ist nicht fest vorgegeben.
    Müßte ich dann quasi in der map wieder nach myDir suchen?
    Sorry, bin in C++ nicht so fit.



  • Suchen in der Map geht ganz einfach:

    Map["myDir"]



  • Ich könnte damit also sowohl die Bezeichnung wie "myDir" als auch den dazugehörigen Wert wie "c:\myDir" als ein Paar einlesen, ist das korrekt?

    Einlesen, nein. Abspeichern, ja.



  • könnt ihr mir das vielleicht mal für ganz doofe erklären? Bitte.



  • Hier mal eine schnell hingeschriebene Möglichkeit, deine Schlüssel / Werte aus den eingelesenen Zeilen in eine map zu packen.

    // Die eingelesenen Zeilen aus deiner Datei
    std::vector<std::string> lines;
    
    // Speichert die Schlüssel und die Werte
    std::map<std::string, std::string>  keys;
    
    // Speichert die Position an der = gefunden wurde
    std::string::size_type found = std::string::npos;
    
    // Iterator zum Durchlaufen des Vektors
    std::vector<std::string>::iterator itr = lines.begin();
    while(itr != lines.end())
    {
    	// Existiert ein = ?
       found = (*itr).find("=");
    
       if(found != std::string::npos)
       {
       	// Speichert alles vor dem = als Schlüssel in der map
       	// Alles nach dem = wird zum Wert des Schlüssels
          keys[(*itr).substr(0, found)] = (*itr).substr(found+1, (*itr).length()-1);
       }
    
       ++itr;
    }
    


  • hm, schlagt mich nicht, aber kann man das ganze nicht auch so lösen, indem man die datei die ausgelesen werden soll einfach zu einer .INI datei umbenennt und zum auslesen der datei getprivateprofilestring() nimmt?

    gruß
    Daniel



  • Hi,
    keine Ahnung wo diese Methode getprivateprofilestring() herkommt (Windows?). Wenn die INI Files einlesen kann, warum nicht.



  • nucknuck schrieb:

    Hi,
    keine Ahnung wo diese Methode getprivateprofilestring() herkommt (Windows?). Wenn die INI Files einlesen kann, warum nicht.

    jo, WinAPI.

    Wenn die INI Datei so aufgebaut ist, kann auf die einzelnen Sektionen, Keys und die Werte der Keys zugegriffen werden:

    [Sektion1]
    key1=a
    key2=b
    key3=c
    
    [Sektion2]
    keyA=1
    keyB=2
    keyC=3
    

    einfach mal in der hilfe gucken.

    gruß
    Daniel

    ps: vielleicht könnte jemand von den "alten Hasen" noch was dazu sagen, bin auch noch relativ neu in c++



  • diese Win-Geschichte hilft mir nicht, da der Kram portabel sein muß, leider, sonst wäre es sicher interessant.

    Den Code sehe ich mir genauer an, Danke.



  • #include <vector>
    #include <map>
    #include <string>
    

    Hatte ich ganz vergessen.
    Wenn du

    using namespace std;
    

    verwendest, kannst du std:: weg lassen.


Anmelden zum Antworten