ProgrammDaten sinnvoll verwalten und speichern...



  • Hoi,
    Was darf ich mir unter

    Vellas schrieb:

    Schlüssel-Wert-Paaren

    vorstellen ?

    🙄



  • std::map<std::string, std::string> einstellungen;
    einstellungen["Port"] = "80";
    


  • hm ahja, gibts dazu Tutorials ?



  • Guck in den Link den ich gepostet habe, da stehen nützliche Informationen drin. Ansonsten google: Google: std::map



  • Eine Map ist eine (simpel ausgedrückt) zweispaltige Tabelle. Erste Spalte ein Schlüssel, zweite ein Wert. Die std::map wird dabei dynamisch größer, wenn du was hinzufügst. Auch ist sie autom. sortiert.

    Schlüssel   | Wert
    ============+===========
    Farbe       | grün
    Schrift     | Arial
    Fullscreen  | false
    ...
    

    Dafür ist eine map ideal:

    std::map<string, string> properties;
    properties["Farbe"] = "grün";
    properties["Schrift"] = "Arial";
    
    // lesen:
    cout << properties["Farbe"] << endl; // gibt grün zurück
    

    Du solltest dich mal lieber mit der C++ Standard-Library beschäftigen, da dort sehr viele fertige und nützliche Dinge enthalten sind, die einem C++ Programmierer das Leben leichter machen.

    Hier ein dt. Artikel über die verschiedenen Container, u.a. auch der map:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html-t-is-143816.html



  • @Artchi:

    Jo mit der STL hab ich mich noch nicht beschäftigt, werd ich aber jetzt mal machen...gut Idee...

    Aber meinst du es ist damit möglich, diese auch 'relativ komfortabel' in einer Datei zu speichern ?



  • Du kannst die Map in einen filestream (std::fstream) schieben und somit rausschreiben. Beim Einlesen der gleiche Weg. Die Klassen arbeiten schon recht gut Hand in Hand zusammen.

    Anstatt das du in ein cout (Konsolen-Stream) die Properties rausschreibst, machst du das in einen Filestream. Ganz easy.

    Dann gibts ja noch (wie schon von mir im ersten Posting gepostet) die boost::program_options, die eigentlich besser dafür geeignet ist, weil sie sich genau diesem Thema annimmt und du praktisch nichts mehr coden mußt. Nämlich Programm Optionen zu speichern und laden. boost::program_options benutzt intern auch die map, aber gibt dir zusätzliche Features. Z.B. kann man AUCH über Kommendozeile die Optionen übergeben.

    http://www.boost.org/doc/html/program_options.html

    Aber dazu müsstest du erstmal Boost herunter laden und einrichten. Boost ist eine mächtige Library für C++ die sehr gut die Standardlib von C++ ergänzt. Aber wenn du bisher nicht mal die Std-Lib kennst, könnte dich Boost evtl. am Anfang "erschlagen". 😉



  • Du kannst die Map in einen filestream (std::fstream) schieben und somit rausschreiben. Beim Einlesen der gleiche Weg. Die Klassen arbeiten schon recht gut Hand in Hand zusammen.

    Anstatt das du in ein cout (Konsolen-Stream) die Properties rausschreibst, machst du das in einen Filestream. Ganz easy.

    jo Filestreams kenn ich 😉

    Dann gibts ja noch (wie schon von mir im ersten Posting gepostet) die boost::program_options, die eigentlich besser dafür geeignet ist, weil sie sich genau diesem Thema annimmt und du praktisch nichts mehr coden mußt. Nämlich Programm Optionen zu speichern und laden. boost::program_options benutzt intern auch die map, aber gibt dir zusätzliche Features. Z.B. kann man AUCH über Kommendozeile die Optionen übergeben.

    http://www.boost.org/doc/html/program_options.html

    Aber dazu müsstest du erstmal Boost herunter laden und einrichten. Boost ist eine mächtige Library für C++ die sehr gut die Standardlib von C++ ergänzt. Aber wenn du bisher nicht mal die Std-Lib kennst, könnte dich Boost evtl. am Anfang "erschlagen". 😉

    Hm ja....naja ich benutz nicht so gerne externe Libs; Programmier das lieber selbst...dabei lernt man ja auch 👍 ist das ne OpenSource Lib ?



  • Aha, und den MP3 decoder programmierst du auch selber? Oder benutzt du dafür eine externe Lib?

    Im ernst, solange es dir ums lernen geht: i.O. Und beim Thema Usersettings zum Lernen alles elber machen, i.O. Aber um später effektiv arbeiten zu können, kommt man einfach nicht um externe Libs umhin. Außerdem sollte man immer Standard-Libs und bekannte Libs einem Selbstbau vorziehen: 1. weil die fertigen Libs meistens schon fehlerfrei sind (man selber macht eher mal einen Fehler), 2. der Code besser von jemand anderem wartbar ist, da er nicht DEINEN Code lernen muß, sondern Standardcode (z.B. map) schon kennt und gleich weiß, was es macht.

    Wie gesagt: Zum lernen natürlich am Anfang was anderes. Aber solltest du dir merken!

    Und ja, Boost ist eine frei benutzbare Lib. Sie hat eigentlich zum Ziel, den ISO-Standard zu erweitern. Im nächsten C++ Standard werden z.B. die Boost Smartpointer, Boost Regex u.a. Sachen mit reinkommen. Also, es ist schon eine ernst zu nehmendere Lib. Die eigentlich jeder C++ler kennen sollte.



  • Artchi schrieb:

    Aha, und den MP3 decoder programmierst du auch selber? Oder benutzt du dafür eine externe Lib?

    naja, ...nee okok...MCI^^ ....naja und da mir MCI im Moment dermaßen aufen Sack geht warscheinlich bald ... ok du hast gewonnen ... FMOD 🤡

    Artchi schrieb:

    Wie gesagt: Zum lernen natürlich am Anfang was anderes. Aber solltest du dir merken!

    Und ja, Boost ist eine frei benutzbare Lib. Sie hat eigentlich zum Ziel, den ISO-Standard zu erweitern. Im nächsten C++ Standard werden z.B. die Boost Smartpointer, Boost Regex u.a. Sachen mit reinkommen. Also, es ist schon eine ernst zu nehmendere Lib. Die eigentlich jeder C++ler kennen sollte.

    Ok, Meister werds mir merken 😉 , danke!


Anmelden zum Antworten