Zyklisches Messdaten speichern



  • Hallo,

    ich habe ein Programm, in welchem ich in einer Timerschleife alle 10 Sekunden 6 Messwerte (RGB-Rot, RGB-Grün, RGB-Blua, YUV-Y, YUV-U, YUV-V) aufnehme. Diese Werte möchte ich über einen längeren Zeitraum (1 - 2 Stunden) speichern. Später sollen diese Werte in Excel ausgewertet werden.

    Leider habe ich nicht so recht den Einfall, wie ich das machen soll. Habe schon im Forum gelesen, dass man direkt über die Excel Makros was machen kann. Dies halte ich jedoch für zu umständlich. Ist es nicht auch möglich, die Daten in einer Datei zu speichern, welche Excel öffnen kann? Die müssten dann halt schon so unterteilt werden, dass in einer Reihe immer R, G, B, Y, U, V steht und bei der nächsten Messung in die nächste Reihe gesprungen wird. Habe auch schon was über Streams gelesen, aber das versteh ich nicht so recht. Also bitte nicht einfach eine Antwort wie "Schau in den FAQ". 😉



  • Hi Schmuech,

    Excel kann CSV Dateien problemlos lesen, das sind Dateien, in denen in jeder Zeile Werte stehen, die durch ein Komma getrennt sind (kann man beim Import auch einstellen, glaube ich...).
    Eigentlich brauchst du nur eine Datei zu öffnen (fopen) und eine Zeile an´s Ende schreiben:

    void WriteData( int R, int G, int B, int Y, int U, int V )
    {
       FILE *pFile;
       char szBuffer[256];
    
       // Datei zum Anhängen im Textmodus öffnen
       pFile = ::fopen( "c:\\daten.csv", "a+t" );
       if( NULL != pFile )
       {
          ::sprintf( szBuffer, "%d,%d,%d,%d,%d,%d,/r/n", R,G,B,Y,U,V );
          ::fwrite( szBuffer, sizeof( char ), ::strlen( szBuffer ), pFile );
          ::fclose( pFile );
       }
    }
    

    Die entstandene Datei solltest du jetzt problemlos in Excel öffnen können.
    Habe das Ganze nur schnell runtergeschrieben, möglich, dass Excel das Semikolon als Trennzeichen benutzt und der Zeilenumbruch /n/r statt /r/n ist.

    Gruß,
    Guido



  • Sehr geil, das probier ich doch gleich mal aus. Vielen Dank!



  • Das Einlesen klappt prima. Das Komma muss beim deutschen Excel und einer *.csv Datei nur ein Semikolon sein.
    Leider bekomme ich immernochnicht den Zeilenumbruch hin. Bei mir wird das /n/r einfach immer in eine Zelle geschrieben. 😞



  • Hi,

    sorry, mein Fehler... ersetze das /r mal durch /a und guck dann weiter...

    Gruß,
    Guido



  • Hallo

    Der Zeilenumbruch unter Windows ist ausschließlich

    "\r\n"
    

    Und auch hier nochmal : Benutz nicht alte C-Funktion, sondern entweder Mittel aus dem C++ Standard (std::ofstream) oder besser noch VCL-Mittel (TStringList)

    bis bald
    akari


Anmelden zum Antworten