Dynamische Variablen erzeugen und gezielt ansprechen?



  • Hallo zusammen,

    Ich stehe noch ziemlich am Anfang, und arbeite mich mit CodeBlocks in C++ ein.
    Ich möchte ein Programm zur Auswertung von Daten aus einer Datenbankabfrage erstellen.
    Die Abfragen sollen aufgetrennt, und in separaten String-Variablen abgespeichert werden.

    Die Ergebnisse werden abschließend in eine Datei geschrieben, und deshalb wollte ich von Beginn an auch String-Variablen dafür verwenden.
    Die benötigten Stringfunktionen habe ich mir schon mit der STL zusammengebaut.
    Aber wie ich die erhaltenen Daten zwischenspeichern soll, ist mir leider gar nicht klar.

    Aufgabe:
    Die Suche nach einer Reihe von "ProjektNamenXYZ" liefert die entsprechenden Datensätze zurück:
    Inhalte aus Datensätzen mit dem Schlüssel Ort="Berlin" sollen in die Variable "Berlin" eingetragen werden können.
    Inhalte aus Datensätzen mit dem Schlüssel Ort="Kiel" in die Variable "Kiel".

    Außerdem sollen sich Variablennamen auch aus dem Ort und dem Datumswert zusammensetzen lassen können:
    Inhalte aus Datensätzen mit den Schlüsseln Ort="Berlin" und Datum="1989" sollen in die Variable "Berlin_0x1" eingetragen werden können.
    Inhalte aus Datensätzen mit den Schlüsseln Ort="Berlin" und Datum="1990" in die Variable "Berlin_0x2".

    Ich frage mich nur, wie ich solche Variablen im Programmverlauf erzeugen und danach auch bequem direkt als "Ort" bzw. "Ort_0xJahr" ansprechen kann?

    Ich hoffe mir kann jemand helfen, wie und mit welchen Datentypen man so eine Aufgabe löst?

    Vielen Dank für eure Antworten
    pixar



  • pixar schrieb:

    Aufgabe:
    Die Suche nach einer Reihe von "ProjektNamenXYZ" liefert die entsprechenden Datensätze zurück:
    Inhalte aus Datensätzen mit dem Schlüssel Ort="Berlin" sollen in die Variable "Berlin" eingetragen werden können.

    ...

    Grundsätzlich gibt es keine zur Laufzeit benannten Variablen. Aber wenn ich es richtig verstehe gibt es mehrere Datensätze pro Ort, und diese sollen im im ersten Schritt im Speicher abgelegt werden. Ein Teil deiner Lösung nennt sich Containter (std::vector, std::list, std::map...), ich tippe dabei auf etwa eine solche Struktur:

    Schlüssel (Ort)          Der Typ deiner Datensätze (std::string oder anderes)
                  |                    |
    std::map<std::string, std::vector<xyz> >
                              |
                          Liste mit den Datensätzen
    

    Im wesentlichen wäre das ein Container auf dem du über den Namen eines Ortes an die Datensatzliste gelangst, und diese per push_back füllst...

    Edit:
    Und die Schlüsselnamen lassen auch anders nennen, auch wenn ich dann schon eher auf einen zusammengesetzten Schlüssel (Ort, Datum) tippe.

    cu André



  • Ich frage mich nur, wie ich solche Variablen im Programmverlauf erzeugen und danach auch bequem direkt als "Ort" bzw. "Ort_0xJahr" ansprechen kann?

    Garnicht.

    Ich hoffe mir kann jemand helfen, wie und mit welchen Datentypen man so eine Aufgabe löst?

    So etwas macht man oft gleich in SQL, also direkt die ganze Auswertung.
    Was sinnvoll ist kommt darauf an was du nun genau machen willst -- was du beschreibst ist ja nicht WAS du machen willst sondern WIE du es machen willst, und so wie du es dir vorstellst geht es nunmal nicht. Und die von asc vorgeschlagene Alternative (die quasi inetwa das nachbaut was du gerne möchtest), kann, muss aber nicht eine gute Lösung für die konkrete Aufgabe sein.



  • Ein vector<string> könnte die Namen der Variablen enthalten - ein weiterer vector könnte paralel Strukturen mit Detail-Infos
    enthalten. Da Vektoren (verkappt) Arrays sind, kann man über den Index die Verbindung zu zugehörigen Daten herstellen.
    💡



  • willy schrieb:

    Ein vector<string> könnte die Namen der Variablen enthalten - ein weiterer vector könnte paralel Strukturen mit Detail-Infos
    enthalten. Da Vektoren (verkappt) Arrays sind, kann man über den Index die Verbindung zu zugehörigen Daten herstellen.
    💡

    Oder man nimmt gleich std::map 🙄



  • Hallo,

    leider ist mein inet-anschluss noch nicht angestellt und so kann nicht so zeitnah auf eure antworten reagieren.

    Abe es geht mir darum, die SQL-Abfragen statistisch auszuwerten.
    Und das kann ich leider nicht so mit SQL erledigen, wie ich es gerne hätte.

    Der Hinweis mit std:map und vectoren klingt interessant, und könnte mir bei meinem Ansatz schon helfen.

    Allerdings muss ich mich erst noch in das ganze Thema einlesen.

    Soweit vielen Dank für eure Hinweise
    pixar 🙂


Anmelden zum Antworten