Daten nach Beenden des Programms speichern



  • zwutz schrieb:

    aber platzsparender

    Wie irrelevant.

    zwutz schrieb:

    dann sieht ein Datensatz vll nur so aus

    201305040000000020
    

    4 Zeichen Jahr
    2 Zeichen Monat
    2 Zeichen Tag
    2 Zeichen Stunde
    2 Zeichen Minute
    2 Zeichen Sekunde
    4 Zeichen Temperatur

    Statt vorher

    2013,5,4,0,0,0,20
    

    Ok, doofes Beispiel, aber Du hast zufällig mehr gebraucht. 🤡



  • Lest mal den Titel: "Daten nach Beenden des Programmes speichern"
    Ich würde das vor dem Beenden machen. Bei wenigen Datensätzen lesbar als ASCII-Text, bei vielen (> 1000) evtl. binär in eine simple Datei.



  • ...



  • berniebutt schrieb:

    Lest mal den Titel: "Daten nach Beenden des Programmes speichern"

    Ein Merker ward geboren ...



  • berniebutt schrieb:

    Lest mal den Titel: "Daten nach Beenden des Programmes speichern"
    Ich würde das vor dem Beenden machen. Bei wenigen Datensätzen lesbar als ASCII-Text, bei vielen (> 1000) evtl. binär in eine simple Datei.

    1000 ist viel?
    Heisst das ein 100 KB Textfile ist schon gross?

    Also ne.
    1000 ist nix.
    Und wie viele Datensätze es werden sollte auch ziemlich egal sein.


  • Mod

    Ich würde das nicht von der Datenmenge abhängig machen, sondern nach dem, was man damit vor hat. Ich selber speichere für meine Zwecke öfters mal viele Gigabyte pro Run, aber ich schreib das trotzdem bloß in eine einfache (komprimierte) ASCII-Datei im Spaltenformat. Eben weil
    a) Ich das Zugriffsmodell einer Datenbank gar nicht benötige
    b) Weiterverarbeitung und Wiedereinlesen besonders einfach sind
    Was der Threadersteller beschreibt, klingt ganz so, als läge dort ein ähnlicher Fall vor.

    Wenn man keine Datenbank braucht, dann kann man sich den Mehraufwand sparen. Mit Platzargumenten braucht man auch nicht kommen. Wenn man in Größenordnungen kommt, in denen Platz relevant ist, dann komprimiert man die Daten. Damit kommt man auf den gleichen Platzbedarf (oder sogar weniger) wie bei einem Binärformat, aber ohne dessen Nachteile (Portabilität, Manipulierbarkeit, Lesbarkeit) . Der Vorteil eines Binärformates wäre eine höhere Verarbeitungsgeschwindigkeit (Lesen und Schreiben).



  • berniebutt schrieb:

    Lest mal den Titel: "Daten nach Beenden des Programmes speichern"
    Ich würde das vor dem Beenden machen. Bei wenigen Datensätzen lesbar als ASCII-Text, bei vielen (> 1000) evtl. binär in eine simple Datei.

    Ja, das war auch meine Intention. Ich könnt auch einen Roman als Titel schreiben, aber das ist auch nicht besser...

    So, wir haben uns intern in der Gruppe jetzt auf eine CSV-Datei geeinigt (auch wenn das Trennzeichen wohl ein Space wird, lass ich es mal bei der Bezeichnung).

    Am Ende soll es so aussehen, dass der Anwender in einem Dropdownmenü auswählt, dass er alle Datensätze mit einem Wert größer x und kleiner y haben will. Und dann auch nur die, die zwischen dem 1.1.13 und 31.3.13 aufgenommen wurden.
    Macht es Sinn hier eine std::list durchzugehen, die ich mir beim Programmstart anlege oder eben die CSV zu parsen und filtern?


  • Mod

    Macht es Sinn hier eine std::list durchzugehen, die ich mir beim Programmstart anlege oder eben die CSV zu parsen und filtern?

    std::list macht praktisch nie Sinn, außer im Informatikunterricht.

    Was du nun beschreibst klingt wieder ziemlich datennbankartig. Vielleicht drückst du dich auch doof aus. Jedenfalls interessiert doch niemanden, wie man das Programm bedient, sondern die Frage ist, was es tun soll. Da wir keine Ahnung haben, welche Werte du meinst, ist deine Frage schwer zu beantworten, welche Technik die beste ist.

    An anderer Stelle bestätigt sich eine Befürchtung, die ich schon hatte, als du sagtest, dass das Programm einfache Plots erstellen soll: Jetzt misst das Programm, speichert Daten, zeichnet Graphen, verarbeitet Daten nach Kriterien, zeigt Daten an. Eierlegende Wollmilchsau? Lass ein Programm genau eine Sache machen und mach diese Sache gut!
    Am ende kannst du dann mehrere Funktionen zu einem übergeordneten Programm zusammenfassen, das dann die Schnittstellen/Bibliotheken der spezialisierten Programme benutzt. Auf diese Weise kannst du dir auch sehr viel Entwicklungsarbeit sparen. Denn beispielsweise ein Plotprogramm zu schreiben braucht heute niemand mehr. Da gibt es tausende fertige Lösungen und alle sind sie viel besser als alles, was man in ein paar Mannwochen schreiben könnte.



  • Okay, ich versuchs nochmal:

    Ich bekomme von einem Mikrocontroller Datensätze mit Zeitstempel umd einem Wert (z.B. einer Temperatur). Die möchte ich nun filtern können (nach Zeitraum, Min-Max-Werte...) und erstmal in Tabellenform anzeigen.

    Edit: Das holen der Daten vom Mikrocontroller muss ich "manuell" durch einen Button anstoßen.


  • Mod

    GER_Moki schrieb:

    Ich bekomme von einem Mikrocontroller Datensätze mit Zeitstempel umd einem Wert (z.B. einer Temperatur). Die möchte ich nun filtern können (nach Zeitraum, Min-Max-Werte...) und erstmal in Tabellenform anzeigen.

    Dann benutz doch ein Tabellenkalkulationsprogramm!
    Aufwand für dich: 0 (da du die Daten schließlich schon als CSV exportierst)
    Leistungsfähigkeit und Flexibilität der Lösung gegenüber einer Eigenentwicklung: 1337 Mal besser.

    Edit: Das holen der Daten vom Mikrocontroller muss ich "manuell" durch einen Button anstoßen.

    Das ist wieder so ein Detail, das uns überhaupt gar nichts sagt.



  • SeppJ schrieb:

    Dann benutz doch ein Tabellenkalkulationsprogramm!
    Aufwand für dich: 0 (da du die Daten schließlich schon als CSV exportierst)
    Leistungsfähigkeit und Flexibilität der Lösung gegenüber einer Eigenentwicklung: 1337 Mal besser.

    Wie gesagt, es ist ein Projekt an der Uni und ich habe noch keine CSV-Datei. Die Daten bekomme ich seriell und verarbeite sie dann weiter. Nur wie ich sie geschickterweise speichere und vorhalte, das ist für mich die eigentliche Frage.



  • Ja, und die wurde bereits beantwortet. Mehrfach. Pack das Zeug in eine CSV Datei.

    GER_Moki schrieb:

    Macht es Sinn hier eine std::list durchzugehen, die ich mir beim Programmstart anlege oder eben die CSV zu parsen und filtern?

    Nimm statt std::list doch einfach std::vector . Und dann kommt's drauf an...
    Kannst du alle Daten im Speicher halten? Und sollen nur die Daten eines Laufs oder auch Daten die in vorangegangenen Sessions gespeichert wurden angezeigt/gefiltert werden?

    Wenn du dir diese Fragen beantwortest, dann ergibt sich die Lösung wohl von ganz alleine.


  • Mod

    hustbaer schrieb:

    Ja, und die wurde bereits beantwortet. Mehrfach. Pack das Zeug in eine CSV Datei.

    Da die Hauptaussage noch nicht so richtig angekommen zu sein scheint, warum das eine gute Idee ist, betone ich es nochmal:
    Sobald du diese CSV-Datei geschrieben hast, bist du praktisch fertig, was die Datenauswertung angeht! Denn dann greift der oben genannte Tipp, dass man ein Programm so gestalten soll, dass es genau eine Sache macht, diese aber gut. Daran haben sich viele Programmierergenerationen gehalten, du kannst nun die Früchte ernten, indem du die Werkzeuge nutzt, die es auf jedem System gibt (oder geben sollte). Die können alle mit CSV (am besten mit Leerzeichen oder Tab als Delimiter) umgehen:
    Tabellen aneinanderhängen? There's an app for that.
    Tabellen zusammenfügen? There's an app for that.
    Tabellen sortieren? There's an app for that.
    Tabellen durchsuchen? There's an app for that.
    Tabellen plotten? There's an app for that.
    Tabellen anzeigen? There's an app for that.

    Zusammengefügte, sortierte Tabellen durchsuchen, die gefundenen Werte plotten? Man würde meinen, man müsste ein Programm schreiben, das die obigen Programme zusammenfügt. Aber wer hätte das gedacht? Programme, die andere Programme verketten, gibt es auch schon!


Anmelden zum Antworten