Variablen aus C++ Programm in Excel-Zellen übertragen



  • Habe jetzt ein wenig herumexperimentiert und dabei sind noch 2 weitere Fragen aufgekommen:

    Wie kann man statt dem Punkt (0.175) die Zahl mit einem Komma (0,175) exportieren?

    Wie kann man mehrere Zahlenwerte hintereinander darstellen?
    Ich möchte bei der Ausgabe von SPF1 = 0.175 dahinter noch die beiden vorherigen Zahlenwerte auch anzeigen sprich:

    Spalte A | Spalte B | Spalte C | Spalte D|
    _________________________________

    SPF1 | 0.175 | 0.1 | 0.075|

    Kann mir da vielleicht bitte jemand einen Beispielcode für diesen Fall zeigen, damit ich das ganze besser verstehen kann.

    Danke schon mal im voraus!

    Lg Kaiza


  • Mod

    Kaiza25 schrieb:

    Nein, dass hätte ich sonst gesagt, mit C++ werden Tabellen ausgelesen, durch diverse if-Abfragen und Rechenoperationen dann mathematisch miteinander verbunden sprich Berechnungen gemacht und die Ergebnisse sollen zur weiteren Verwendung ausgegeben werden.

    Also kurz: Kalkulieren mit Tabellen? Wäre das nicht viel einfacher mit einer Sprache oder Programm, das für solche Aufgaben gemacht wurde? Zum Beispiel - ein ganz wilder Vorschlag - einem Tabellenkalkulationsprogramm?

    Nicht dass ich von C++ abraten würde; aber du sprichst ja offensichtlich derzeit noch kein C++, und es kommt mir komisch vor, C++ lernen zu wollen für eine Problemstellung, die in anderen Sprachen wesentlich einfacher zu lösen wäre. C++ ist eine ganz allgemeine Programmiersprache, mit der man alles machen kann, aber im Gegenzug muss man auch fast alles von Grund auf selber konstruieren. Rechnen mit Tabellen geht halt wesentlich einfacher, wenn man beispielsweise nicht erst selber modellieren muss, was überhaupt eine Tabelle ist, sondern auf fertige Funktionalität zurückgreifen kann.



  • Also, damit es jetzt keine Verständigungsprobleme usw. gibt.

    Die Aufgabe besteht darin, aus 20 Eingabeparamtern einen einzigen Wert zu errechnen (über ziemlich viele Zwischenwerte, ca. 140)
    Das Ergebnis der Berechnung gibt das Sicherheitsrisiko einer Konstruktion an. Die stellt sich aus, einer Analyse der Häufigkeit auftretender Ereignisse und dem Schadensausmaß der Ereignisse zusammen.

    Warum jetzt C++, ganz einfach, weil ich nur von dieser Programmiersprache ein wenig Ahnung habe und mit Excel-Vorlagen usw. das ganze nur bedingt automatisiert wird.

    Knackpunkt war die Auswertung von 40 Tabellen, welche als MS Access Datei vorliegen und immer wieder von dem Institut, welches das Schadensausmaß von Ereignissen analysiert, aktualisiert werden. Deswegen konnte ich die Werte nicht einfach in den Programmcode übernehmen.

    Derzeit macht mein Programm folgendes:

    Über das Konsolenfenster gebe ich meine Eingabewerte nach der Reihe ein. Danach wird die Häufigkeitsanalyse durch mathematische Operationen durchgeführt. Mittels if-Abfragen, werden bestimmte Rechenwege eingeschlagen, welche von den Eingabewerten bestimmt werden. Auch die Auswahl der Tabellen, sowie die einzelnen Werte der Tabellen sind von den Eingabewerten abhängig. Mittels SQL hab ich es auch hinbekommen, dass ich immer in Abhängigkeit der Eingabewerte auch die richtigen Tabellenwerte erhalte.

    Diese werden dann noch miteinander multipliziert und fertig. Am Ende habe ich einen Wert als Ergebnis und ein paar hundert Häufigkeitswerte und Schadensausmaßwerte. Diese Ergebnisse sind aber für die Nachvollziehbarkeit wichtig und müssen dementsprechend auch ausgegeben werden, wo wir nun bei meinem Problem angekommen wären.

    Ausgabe aller Werte in eine Excel-Datei...

    Hoffentlich, ist meine Problematik jetzt nachvollziehbar.

    Lg Kaiza


  • Mod

    Ok, verstehe.

    Dann ist doch die Frage, die sich aufdrängt, wie du deine Werte im Programm gespeichert hast. Ich nehme doch mal stark an, dass du deine hundert Häufigkeitswerte nicht wirklich in einzelnen Variablen

    double SPF1, SPF2, ... SPF99, SPF100;
    

    gespeichert hast, sondern irgendwie als vector, array oder sonstige Datenstruktur.

    Allgemein kann man auch weitgehend unabhängig vom unterliegenden Container einfach eine Ausgabeschleife der Art

    for(auto value : data)  // wobei data der Container mit deinen Daten sein soll
      cout <<< value << '\n';
    

    machen. Die genaue Formatierung muss dabei natürlich noch auf deine Bedürfnisse angepasst werden.



  • Leider habe ich aber genau das gemacht...

    Ein kleines Beispiel:

    Alle Häufigkeitsereignisse vom Brandfall haben die deklaration B1-B20 (ist vorgegeben) diese sind mit den vorherigen Häufigkeitsereignissen verknüpft welche alle die Bezeichnung A1-A20 haben.

    Die sind miteinander verkettet, also um weiter zu rechnen werden diese erst multipliziert was AB1-AB20 ergibt.

    Dazu kommen dann zur Häuigkeit B1-B20 das zugehörige Schadensereignis... Also PF1-PF20, welche wiederum multipliziert wird. Erst dannach habe ich SPF1-SPF20 als Ergebnis, wobei die ganze Reihe dann für den Sicherheitswert addiert wird. Da aber Beispielsweise SPF5 nicht für den Sicherheitswert gebraucht wird, fällt dieser raus.

    Da ich von meinem Wissensstand aus, keine Ahnung hatte, wie ich das ansonsten lösen könnte, habe ich jetzt für jeden Wert und Zwischenwert usw. eine eigene Variable. Ich habe auch keine Ahnung, wie man bei so einem Datenvektor, Array oder Datenstruktur, unterschiedliche Werte in die Berechnung mitnimmt und so Werte wie SPF5 zwar ausgibt, aber nicht mitrechnet.

    Schön langsam merke ich, dass die Ausgabe in ein Excel File nicht mein einziges Problem ist...

    Lg Kaiza


  • Mod

    Ja, du solltest mal ganz dringend ein Grundlagenlehrbuch der Programmierung lesen. Das alles ginge viel einfacher.

    Aber, da du ja anscheinend kein Problem damit hattest, hunderte oder gar tausende von Zeilen Code zu schreiben, um jeder deiner Variablen in mühsamer Handarbeit einzeln ihren Wert zuzuweisen, sehe ich gerade nicht dein Problem, weitere hunderte oder gar tausende Codezeilen zu schreiben, um jede deiner Variablen in mühsamer Handarbeit einzeln auszugeben. Wo genau liegt das Problem?



  • Also derzeit liegt es daran, dass ich bei den ausgegebenen Zahlen einen . habe, also 0.175 allerdings bräuchte ich die Zahlen mit einem Komma also 0,175.

    Desweiteren würde ich gerne mehrere Zahlenwerte auch nebeneinander ausgeben.

    Zum Thema Grundlagenbuch, das habe ich mir schon bestellt. Wichtig ist für mich, dass die Berechnung zumindest erstmal funktioniert, sowie durch die Hilfe der Community, die Werte nun auch in einer Excel-Datei stehen. Für die Vereinfachung des Codes kann ich mir dann Zeit lassen

    Was noch ein Punkt wäre, kann man beispielsweise die ersten 100 Werte in die Arbeitsmappe 1 schreiben, dann eine neue Arbeitsmappe über das C++ Programm erstellen und dort hinein dann weitere Werte schreiben?

    Vielen dank für die Hilfe!

    Lg Kaiza



  • Einfach nachdem die Daten in die csv ausgegeben wurden, gehst du mit notepad rein und suchst jeden Punkt und tippst da ein Komma hin. Erledigt! Oder du benutzt eben ein string find/replace, aber wer braucht schon sowas...



  • TGGC schrieb:

    Einfach nachdem die Daten in die csv ausgegeben wurden, gehst du mit notepad rein und suchst jeden Punkt und tippst da ein Komma hin. Erledigt! Oder du benutzt eben ein string find/replace, aber wer braucht schon sowas...

    Wo sind wir denn? Warum nicht direkt bei der Ausgabe schon Komma ausgeben? Das geht z.B. so:

    locale loc("de-DE"); // Locale für deutsch
    
    ofstream file("test.csv");
    file.imbue(loc);  // Locale vor der ersten Ausgabe setzen
    

    Mehrere Zahlenwerte nebeneinander geht indem man diese mit einem Semikolon abtrennt. Aufteilung auf mehrere Arbeitsmappen wüsste ich nicht wie man das mit CSV Dateien hinkriegt.



  • @ sebi707

    Habs jetzt ausprobiert und er ersetzt alle Punkte durch ein Komma. Vielen Dank für die Hilfe dafür!

    Okay, also bei CSV Dateien geht das mit der Arbeitsmappe nicht...

    Vielleicht weiß ja wer eine Lösung wie ich das ansonsten noch einfach hinbekomme.

    Danke schon mal im voraus.

    Lg Kaiza



  • Warum machst du das Ganze nicht mit VBA? Da hast du vollen Zugriff auf Excel und kannst mit deinen Arbeitsmappen machen was du willst. Klar ist das etwas langsam.
    Eine Alternative wäre ein Excel-Zugriff über OLE. Da brauchst du aber erstmal ein Lib die dir das abnimmt.
    Hier ist mal ein Beispiel für OLE Zugriff mit C++
    http://www.codeproject.com/Articles/34998/MS-Office-OLE-Automation-Using-C


Anmelden zum Antworten