Array Messdaten in Exceldatei speichern



  • Hallo,

    ich versuche in C meine erhaltenen Messdaten in eine Exceltabelle zu speichern, da diese Werte später von matlab ausgelesen werden sollen.

    ich habe berreits Code um einzelne Werte in Excel zuschreiben

    //Daten in Excel speichern 
    	using namespace std;
        vector< double > vec1;
        vector< double > vec2;
        vec1.push_back( 0 );
        vec1.push_back( 5.8 );
        vec1.push_back( 5.6 );
        vec2.push_back( 156.01 );
        vec2.push_back( -0.8 );
        vec2.push_back( 18.0 );
    
        ofstream out("Mess-Daten.csv");
        out.imbue( std::locale("German") ); // für die deutsche Version von Excel
        transform( vec1.begin(), vec1.end(), vec2.begin(),
            ostream_iterator< Zeile >( out, "\n" ), &Zeile::make );
    
        // Get display screen information & clear the screen.
        hConsoleOut = GetStdHandle( STD_OUTPUT_HANDLE );
        GetConsoleScreenBufferInfo( hConsoleOut, &csbiInfo );
        ClearScreen();
        WriteTitle( 0 );
    

    Meine Frage.

    Wie kann ich ein Array von Messdaten in die Datei schreiben.
    Bzw während einer Bewegung sollen mehrere Messdaten aufgenommen werden(mehrer Messshots) und diese in einem Array gespeichert werden.
    Das entstandene große Array mit allen Messungen soll dann in Excel gespeichert werden.

    Habt Ihr ne Idee wie ich dies am Besten umsetzte?

    LG



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89, C99 und C11) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Erst Threadnekromantie dann falsches Forum! Du machst echt Arbeit! 😡

    Sei froh, dass ich heute meinen geduldigen Tag habe.

    Dein Code ist unvollständig und (da du nicht einmal weißt, in welcher Sprache er geschrieben ist) höchstwahrscheinlich ohne jedes Verstehen irgendwo abgeschrieben (hier im Forum? Das sieht wie der Stil von Werner Salomon aus). Schreib einfach beide Vektoren neben- oder untereinander in die Datei, getrennt durch ein beliebiges Trennzeichen (Tabulator, Leerzeichen, Komma, Semikolon). Excel pflückt das schon wieder korrekt auseinander. Wo ist das Problem? Muss ja nicht ganz so elegant aussehen wie dein Codefetzen mit dem transform.

    P.S.: Ja, tatsächlich von Werner Salomon abgeschrieben, wie ich in dem Nekrothread sehe. Verstehst du eigentlich irgendeine Zeile an der Lösung?



  • Das ist nicht C, das ist C++



  • Ich weiß aber der rest meines Riesenprogramms ist c also ohne Klasssen etc

    deswegen wollte ich alles in C haben ... habe aber sonst kein Beispiel gefunden

    also ist mit C schon lieber! Deswegen hatte ich auch das C Teil und nicht den C++ Teil ausgewählt 😞


  • Mod

    Du kannst in C keine vectoren haben. Ansonsten siehe mein edit weiter oben. Wo ist das Problem, deine Werte einfach mit Trennzeichen in eine Datei zu schreiben?



  • Hab schon lang nix mehr in c gemacht, aber folgende Schlüsselwörter , die dir helfen:

    FILE, fopen, fprintf, fclose

    🙂



  • Abgesehen davon, dass das keine Schlüsselwörter sind... :p
    @TE: In C gibt es all das nicht.



  • Danke für die Hilfe



  • Also ich versuche es nocheinmal mein Problem genauer zu beschreiben.

    Ich mache eine Messung diese Messung ergibt ein Array in dem 16384 Werte abgespeichert werden.

    Diese Messung wird dann X-Mal durchgeführt

    Alle Messdaten also (15000 * X )Werte sollen in eine Excel datei geschrieben werden.

    Ich hatte vorher den Code von dem Werner Salomon abgeschrieben, ist ja nicht verboten, um erstmal zu gucken wie das genau funktioniert.
    Mit einzelnen Werten habe ich auch kein Problem und den Code verstehe ich.
    Ich weiß nur nicht wie man das bei (15000 * X )Werten machen kann.

    Ich dachte ein forum ist dazu da um Fragen zu stellen und nicht ständig angemacht zu werden..

    Ich hatte mein problem im C Bereich gepostet weil ich ansonsten keine Klassen etc benutze. Und weil mien problem ja schon in die Richtung geht, ich wollte außerdem nicht wegen jeder Kleinigkeit ein neues Thema aufmachen...

    Evtl ist ja noch jemand nettes im Forum der einen nicht gleich rund macht wenn man Fragen stellt.


  • Mod

    Es ist unklar, womit du ein Problem hast. Darum kann dir auch keiner helfen. Du hast eine Reihe Werte, willst diese in eine Datei schreiben. Mach eine Schleife, schreib die Werte raus! An welcher Stelle davon kommst du nicht weiter?



  • ABCD schrieb:

    Alle Messdaten also (15000 * X )Werte sollen in eine Excel datei geschrieben werden.

    .. Du hast noch nicht gesagt wie das geschehen soll.

    Sollen später alle Werte einer Messung in einer eigenen Spalte stehen? Also Spalte-A enthält die Werte der 1.Messung, Spalte-B die der 2.Messung usw.
    Oder können alle Werte in Spalte-A stehen - dann eben in 15000 * X (oder 0x4000 * 😵 Zeilen unter einander?

    Oder vielleicht ganz anders?



  • Hallo

    also ich möchte meine verschiedenen Messungen in verschiedenen Spalten speichern. Damit ich diese datei später mit matlab auslesen kann.

    ich habe das ganze jetzt so realisiert

    #define ANZAHL_ZEILEN 500		
    #define ANZAHL_SPALTEN 2	
    #define SPALTENBREITE 5
    #define ANZAHL_ZEILENENDE 2
    
    FILE *fp=fopen("C:/Messergebnis.txt","w"); //Dateipfad
    	long pos;
    	int s,z;
    
    	for (s=0;s<ANZAHL_SPALTEN;s++)
    	{
    		for(z=0;z<ANZAHL_ZEILEN;z++)
    		{
    			pos=z*(ANZAHL_SPALTEN*SPALTENBREITE+ANZAHL_ZEILENENDE)+SPALTENBREITE*s;
    			//fseek(fp,pos,SEEK_SET);
    			fprintf(fp, "%*d", SPALTENBREITE,wert[s][z]);
    
    			if(s==ANZAHL_SPALTEN-2)
    			{
    				fprintf(fp,"\n");
    			}
    
    			if(s==ANZAHL_SPALTEN-1)
    			{
    				fprintf(fp,"\n");
    			}
    		}
    		fclose(fp);
    		return 0;
    
    	}
    

    es funktioniert allerdings nur für 1 Spalte
    sobald ich eine zweite hinzu nehmen schreibt er alles in die 1ste Zeile.

    weiß einer einen Rat? 😕


  • Mod

    for (zeilen)
    {
      for (spalten)
      {
        Gib aus wert(zeile,spalte);
        Gib aus Trennzeichen;
      }
      Gib aus Zeilenumbruch;
    }
    


  • Darauf bin ich auch gekommen ... es funktioniert aber nicht ^^


  • Mod

    ABCD schrieb:

    Darauf bin ich auch gekommen ... es funktioniert aber nicht ^^

    Dann zeig doch mal, wie du das versuchst hast. Der Code den du gezeigt hast, hat mit meinem einfachen (und richtigen) Algorithmus nicht einmal entfernt zu tun, wie man schon auf den ersten Blick anhand der Schleifenstruktur sehen kann.



  • ABCD schrieb:

    weiß einer einen Rat? 😕

    Ja ... mach' es so, wie es SeppJ bereits im Prinzip vorgeschlagen hat. Wenn es ok ist, alle Werte aller Messreihen in einem Array wert[X][0x4000] zu speichern, so kannst Du sie am Ende so ausgeben, nachdem alle Messungen aufgenommen sind:

    #include <cstdio>
    #include <cstdlib>
    
    #define ANZAHL_ZEILEN 500      
    #define ANZAHL_SPALTEN 2   
    #define SPALTENBREITE 5
    
    int main()
    {
        int wert[ANZAHL_SPALTEN][ANZAHL_ZEILEN]; // ich unterstelle mal, 'wert' ist vom Typ int[][]
        // ... array 'wert' füllen
        FILE *fp=fopen("C:/Messergebnis.txt","w"); //Dateipfad
        int s,z;
        for(z=0;z<ANZAHL_ZEILEN;++z)
        {
            for (s=0;s<ANZAHL_SPALTEN;++s)
            {
                fprintf(fp, " %*d", SPALTENBREITE,wert[s][z]); // mit <Space> als Trennzeichen
            }
            fprintf(fp,"\n");
        }
        fclose(fp);
        return 0;
    }
    

    später kannst Du die Datei C:/Messergebnis.txt in Excel (als Textdatei!) öffnen und als Trennzeichen gibst Du 'Leerzeichen' an.

    Gruß
    Werner



  • Habe das problem gelöst

    ich musste die Spaltenbreite erhöhen weil die Werte nicht reingepasst haben, und ich dachte das wäre ienfach nur der Abstand zwischen den Werten 🤡

    Danke an alle


Log in to reply