Arrayinhalt in externe txt-Datei speichern



  • wie fast immer gibts auch hier verschiedene ansätze der portabelste wäre eine serialize und deserialize function zu basteln die dir deine binär daten in text umwandelt und den könntest dann mit fputs rein schreiben, auch möglich aber eher unschön das array einfach mit fwrite in die datei schreiben und mit fread wieder auslesen.
    falls dir der erste ansatz gefällt schlage ich xml oder json vor

    lg lolo



  • noobLolo schrieb:

    wie fast immer gibts auch hier verschiedene ansätze der portabelste wäre eine serialize und deserialize function zu basteln

    Hast du zuviel mit MFC programmiert?

    noobLolo schrieb:

    falls dir der erste ansatz gefällt schlage ich xml oder json vor

    Das ist wie mit Kanonen auf Spatzen zu schießen. :p

    int my_serialize( char* s, FILE* fp )
    {
    	if ( fprintf(fp,"%s\n", s) < 0 )
    		return 1; // Fehler.
    	return 0;
    }
    
    int main() {
    	int i = 0;
    	char* arr[] = {"1",
    					"11",
    					"111",
    					"1111",
    					NULL
    					};
    	FILE* fp = fopen("test.txt", "wb");
    	if (!fp) return 0;
    	while ( arr[i] )
    		if(my_serialize(arr[i++], fp)) break;
    	fclose(fp);
    	return 0; 
    }
    


  • Ich würde fwrite und fread empfehlen.

    #include <assert.h>
    int array[5][] = {
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1}
    
    assert(FILE *file = fopen("test.dat", "wb"));
    assert(sizeof(array)==fwrite(array, sizeof(array), 1, file));
    fclose(file);
    ...
    assert(FILE *file = fopen("test.dat", "rb"));
    assert(sizeof(array)==fread(array, sizeof(array), 1, file));
    fclose(file);
    

    Solange du nicht versuchst mit dem Programm Arrays von PC auf Handys zu kopieren sollte das alles klappen.



  • nwp2 schrieb:

    #include <assert.h>
    int array[5][] = {
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1,
         1, 1, 1, 1, 1}
    
    assert(FILE *file = fopen("test.dat", "wb"));
    assert(sizeof(array)==fwrite(array, sizeof(array), 1, file));
    fclose(file);
    ...
    assert(FILE *file = fopen("test.dat", "rb"));
    assert(sizeof(array)==fread(array, sizeof(array), 1, file));
    fclose(file);
    

    ^^compile das mal als 'release'-version. *fg*
    🙂



  • mondbewohner schrieb:

    Hast du zuviel mit MFC programmiert?

    das wär ja noch schöner 😉

    mondbewohner schrieb:

    Das ist wie mit Kanonen auf Spatzen zu schießen.

    mag sein dass du recht hast, allerdings find ich sowas wie

    ["1","11","111","1111"]
    

    in ner textdatei schöner als

    1
    11
    111
    1111
    

    da ich dann gleich die struktur erkenn was mir bei 4 zeilen schon bischen schwerer fällt



  • noobLolo schrieb:

    mondbewohner schrieb:

    Das ist wie mit Kanonen auf Spatzen zu schießen.

    mag sein dass du recht hast, allerdings find ich sowas wie

    ["1","11","111","1111"]
    

    in ner textdatei schöner als

    1
    11
    111
    1111
    

    da ich dann gleich die struktur erkenn was mir bei 4 zeilen schon bischen schwerer fällt

    ^^nim doch CSV, das verstehen viel programme, kannste dann sogar mit 'ner tabellenkalkulation oder in eine datenbank einlesen.

    1,11,111,111
    

    🙂



  • ;fricky schrieb:

    ^^nim doch CSV, das verstehen viel programme, kannste dann sogar mit 'ner tabellenkalkulation oder in eine datenbank einlesen.

    super vorschlag, wieso bin ich da nicht selbst drauf gekommen 😃



  • ich finde den Fehler in meinem Code nicht:

    for(i=0;i<iMax;i++)
    		{
    			for(j=0;j<iMax;j++)
    			{
    				fputs(array[i][j], pfile);
    			}
    			fputs("\n",pfile);
    		}
    		fclose (pfile);
    

    😉 vielen dank



  • Otto32 schrieb:

    ich finde den Fehler in meinem Code nicht:

    for(i=0;i<iMax;i++)
    		{
    			for(j=0;j<iMax;j++)
    			{
    				fputs(array[i][j], pfile);
    			}
    			fputs("\n",pfile);
    		}
    		fclose (pfile);
    

    😉 vielen dank

    Zeile 3: vielleicht jMax statt iMax?
    Zeile 5: fputs schreibt einen String in eine Datei. Bist du sicher dass array[i][j] ein String und keine Zahl ist?
    Vorher: Hast du pfile ordentlich aufgemacht?



  • for(i=0;i<iMax;i++){
        for(j=0;j<iMax-1;j++){
            fputs(array[i][j], pfile);
            fputs(",", pfile);
        }
        fputs(array[i][j], pfile);
        fputs("\n",pfile);
    }
    fclose(pfile);
    

    man müßte doch "," und "\n" escapen falls sowas in dem array vorkommt, gehen wir mal davon aus es kommt nicht vor:)


Anmelden zum Antworten