2D-Array in TXT schreiben



  • ok, also mein code funktioniert nun auch wunderbar.

    hat der code von DocShoe irgendwelche vorteile?

    habe noch nicht für 10000 elemente getestet, aber hätte der evt. gewindigkeitsvorteile?


  • Mod

    ootobbyoo schrieb:

    ok, also mein code funktioniert nun auch wunderbar.

    hat der code von DocShoe irgendwelche vorteile?

    habe noch nicht für 10000 elemente getestet, aber hätte der evt. gewindigkeitsvorteile?

    Der Code von DocShoe ist viel allgemeiner, ohne wesentliche Nachteile durch die Abstraktion zu haben. Er ermöglicht es nämlich auch "nicht-rechteckige" Arrays auszugeben, was ein durchaus nicht ungewöhnlicher Anwendungsfall ist. Noch allgemeiner wäre es natürlich ein Template anstatt einer spezialisierten Funktion für vector<double> zu nehmen, aber wir wollen mal nicht gleich übertreiben.



  • also, mein code sieht nun folgendermaßen aus:

    // Schreibt M_2 in TXT:
    void M_2_to_csv(vector<vector<vector<double> > > array){
    
    	long zeilen, spalten;
    
    	FILE *file;
    
    	zeilen = array.size(); // Länge Zeilen
    	spalten = array[0].size(); // Länge Spalten
    
    	file = fopen("M_2.txt", "w");
    
    	for(int i = 0; i < zeilen -1 ; i++){  // "-1", da letzte Zeile abgespalten wird
    		for(int h = 0; h < spalten; h++){
    			if(h < spalten - 1){fprintf( file, "%g#", array[i][h][1] );}
    		}
    		fprintf( file, "\n" );
    	}
        fclose(file);
    }
    

    das funktioniert auch wunderbar...

    allerdings möchte ich nun, dass hinter den letzten wert in der zeile keine raute mehr geschrieben wird. wie ist das möglich?



  • Die letzte Ausgabe einfach außerhalb der Schleife machen.



  • das hatte ich auch schon versucht, aber dann schreibt er den letzten wert immer an die zweite stelle und allen anderen werte sind wieder weg...



  • ootobbyoo schrieb:

    das hatte ich auch schon versucht, aber dann schreibt er den letzten wert immer an die zweite stelle und allen anderen werte sind wieder weg...

    Was macht er?



  • also eigentlich sollte es in der txt z.B. so aussehen:

    2#3#4#13#0#0#0

    es sieht dann aber so aus:

    2#0



  • hat niemand eine idee?

    hier nochmal der ursprüngliche code:

    // Schreibt M_2 in TXT:
    void M_2_to_csv(vector<vector<vector<double> > > array){
    
    	long zeilen, spalten;
    
    	FILE *file;
    
    	zeilen = array.size(); // Länge Zeilen
    	spalten = array[0].size(); // Länge Spalten
    
    	file = fopen("M_2.txt", "w");
    
    	for(int i = 0; i < zeilen -1 ; i++){  // "-1", da letzte Zeile abgespalten wird
    		for(int h = 0; h < spalten; h++){
    			fprintf( file, "%g#", array[i][h][1] );
    		}
    		fprintf( file, "\n" );
    	}
        fclose(file);
    }
    

    ich möchte nur, dass am eine der zeile keine raute steht. das kann eigentlich nicht so schwer sein...



  • Hallo,

    for(int i = 0; i < zeilen -1 ; i++){  // "-1", da letzte Zeile abgespalten wird
            for(int h = 0; h < spalten - 1; h++){
                fprintf( file, "%g#", array[i][h][1] );
            }
            fprintf( file, "%g\n", array[zeilen - 2][spalten - 1][1] );
        }
    

    Wie wärs damit?



  • Braunstein schrieb:

    Hallo,

    for(int i = 0; i < zeilen -1 ; i++){  // "-1", da letzte Zeile abgespalten wird
            for(int h = 0; h < spalten - 1; h++){
                fprintf( file, "%g#", array[i][h][1] );
            }
            fprintf( file, "%g\n", array[zeilen - 2][spalten - 1][1] );
        }
    

    Wie wärs damit?

    Wie wärs mit C++?



  • Warum sagst du mir das?
    Der OP wollte printf und FILE verwenden, wer bin ich denn ihn daran zu hindern? 😉



  • Du, bist, BRAUNSTEIN! Aber leider nicht Sparta, sonst hättest du ihn davon überzeugt, dass fprintf und FILE der absolut falsche Ansatz in C++ sind.



  • ok, danke erstmal.

    wieso der falsche ansatz? wie mache ich es denn besser?

    so, wie ich es geschrieben habe, läuft es sehr gut und auch schnell...



  • Richtig wäre es die Streams zu benutzen. Sonst kannst du gleich C schreiben.



  • ok, aber welchen vorteil bringt mir das?



  • Typsicherheit und Austauschbarkeit. Ein fprintf mit einem Parameter, der nicht zum Format Identifier passt kann gerne schon mal für Unruhe sorgen.
    Wenn du einen iostream operator für deinen Datentyp implementierst kann der Datentyp seinen Inhalt in jeden Stream schreiben und jeden Stream lesen, der das istream/ostream Interface unterstützt.


Anmelden zum Antworten