Aus einer ini datei auslesen



  • Hallo,
    habe folgendes problem, undzwar möchte ich folgendes habe in einer .cfg auslesen
    [Datei]
    Zahl.1.Nummer=1

    int VARIABLE = 1;
    int iDatei = GetPrivateProfileIntA("Datei", "Zahl." & VARIABLE & ".Nummer", 0,"C:\\settings.cfg")
    

    weiß jemand was ich falsch mache?

    er sagt mir : int is incompatible with parameter of type LPCSTR bei VARIABLE
    danke im voraus ;;)


  • Mod

    Mit & verknüpft man keine Zeichenketten. Du darfst beim Programmieren nicht einfach raten, was wohl richtig sein könnte. Code ist kein zusammengeschmissener Zeichenhaufen. Code ist Logik pur. Du musst von jedem einzelnen Zeichen in deinem Programm genau wissen, wo und wieso du es setzt.

    Vermutlich suchst du eher so etwas:

    GetPrivateProfileIntA("Datei", ("Zahl." + to_string(VARIABLE) + ".Nummer").c_str(), 0,"C:\\settings.cfg");
    


  • "& VARIABLE &" sieht mir sehr nach BASIC-Syntax aus.
    In C++ benutze dafür am besten die Klasse stringstream bzw. ostringstream.



  • slappy1996 schrieb:

    Hallo,
    habe folgendes problem, undzwar möchte ich folgendes habe in einer .cfg auslesen

    Das ist schon mal kein korrekter deutscher Satz 😃



  • SeppJ schrieb:

    Mit & verknüpft man keine Zeichenketten. Du darfst beim Programmieren nicht einfach raten, was wohl richtig sein könnte. Code ist kein zusammengeschmissener Zeichenhaufen. Code ist Logik pur. Du musst von jedem einzelnen Zeichen in deinem Programm genau wissen, wo und wieso du es setzt.

    Vermutlich suchst du eher so etwas:

    GetPrivateProfileIntA("Datei", ("Zahl." + to_string(VARIABLE) + ".Nummer").c_str(), 0,"C:\\settings.cfg");
    

    danke für die antwort, das problem ist, er sagt mir jetzt bei .Nummer = expression must have integral or unscoped enum type

    wie gesagt, ich habe es mit & ausprobiert da ich es so aus autoit kenne und c++ neuland für mich ist 🙂


  • Mod

    slappy1996 schrieb:

    danke für die antwort, das problem ist, er sagt mir jetzt bei .Nummer = expression must have integral or unscoped enum type

    Das sollte nicht sein. Ist das tatsächlich die erste Fehlermeldung oder vielleicht doch eine Folgemeldung aufgrund eines vorherigen Fehlers? Ich hätte nämlich eher erwartet, dass to_string nicht gefunden wird, weil du dazu die C++11-Unterstützung deines Compilers aktivieren müsstest. Aber wenn to_string bekannt ist, dann ist der Code 100% richtig.

    Zeig mal ganz genau den Code, der den Fehler verursacht mit der genauen, vollständigen Fehlermeldung.



  • nein tostring hat er natürlich nicht gefunden hab dieses auch gelöscht kann es daran liegen?


  • Mod

    slappy1996 schrieb:

    nein tostring hat er natürlich nicht gefunden hab dieses auch gelöscht kann es daran liegen?

    Natürlich liegt es da dran. Wenn du Code veränderst, ohne zu verstehen was du tust, dann ist doch klar, dass das nicht mehr funktioniert.

    Und um das mal direkt zu sagen: Wenn du dann kommst und sagst, dass der Code nicht funktionieren würde, aber nicht erwähnst, dass du selber da ohne Plan da einfach Teile gelöscht hast, dann ist das eine bösartige Verschwendung der Zeit derer, die dir hier helfen wollten und sie werden den Vorfall sicher nicht vergessen.



  • slappy1996 schrieb:

    Hallo,
    habe folgendes problem, undzwar möchte ich folgendes habe in einer .cfg auslesen
    [Datei]
    Zahl.1.Nummer=1

    int VARIABLE = 1;
    int iDatei = GetPrivateProfileIntA("Datei", "Zahl." & VARIABLE & ".Nummer", 0,"C:\\settings.cfg")
    

    weiß jemand was ich falsch mache?

    Wie schon gesagt wurde: das ist kein einzelner, zusammengebastelter String, der der Funktion übergeben wird sondern es sind mehrere Parameter, musst dich immer an deren Doku orientieren, da hänge ich täglich mindestens ca. 2 Stunden rum 😃

    Du solltest auch die "neutrale" Form GetPrivateProfileInt benutzen, die auch beim Wechsel auf Unicode ohne Anpassung funktioniert.



  • @deejey
    Wenn er GetPrivateProfileInt statt GetPrivateProfileIntA verwendet müsste er aber auch überall _T("foo") statt "foo" schreiben.
    Und für std::basic_string muss er sich dann nen eigenen typedef tstring oder so machen.
    Alles nicht so einfach.

    Ansonsten... sollte das schon ein Einzeiler sein. SeppJ hat ja schon gezeigt wie das aussieht.
    Natürlich sollte man eine Hilfsfunktion machen wenn man das öfter braucht, damit man den ganzen Ranz nicht 1000 kopieren muss. Aber man kann es durchaus in einer Zeile schreiben.

    Dummerweise zeigt er uns aber nicht 1:1 copy-paste den Output des Compilers, und deswegen können wir alle nur rumraten.
    Und das interessiert mich grad gar nicht 🙂


Anmelden zum Antworten