Externe Datei in Form von Array!



  • Also mit anderen Worten, brauche ich eine Datei auf der ich Daten speicher kann, und die mit Hilfe von einem array zugreifen und ändern kann!
    Hoffe du hast es jetzt verstanden was ich meine??



  • Aaaach sooo.
    Du kannst das ganze Array in einer Datei speichern, oder einen einzelnen Wert aus dem Array.
    Mit fread oder fwrite z.B.



  • Dann kann man sich das ganze Gedöns mit den Headerdateien und so sparen.
    Sag doch gleich was du willst 😃
    Vielleicht bin ich heute ein wenig begriffsstutzig 😃

    Das da unten speichert ein Array in eine Datei.
    Ich hoffe das es jetzt das ist, was du wolltest 😃

    #define INDEX 10
    
    #include <stdio.h>
    
    void init( int a[INDEX][INDEX] )
    {
    	int i = 0, j = 0;
    
    	for ( i = 0; i < INDEX; i++ )
    	{
    		for ( j = 0; j < INDEX; j++ )
    		{
    			 a[i][j] = 0;
    		}
    	}
    }
    
    void zeig( int a[INDEX][INDEX] )
    {
    	int i = 0, j = 0;
    
    	for ( i = 0; i < INDEX; i++ )
    	{
    		for ( j = 0; j < INDEX; j++ )
    		{
    			 printf("%5d", a[i][j] );
    		}
    		puts("\n");
    	}
    	puts("\n");
    	puts("\n");
    }
    
    int main()
    {
    	int array[INDEX][INDEX];
    	int i = 0, j = 0;
    	FILE* fp;
    	char *datei = "test.dat";
    
    	puts("Noch ist Schrott im RAM");
    
    	zeig( array ); // Noch ist Schrott im RAM
    	init( array ); // Initialisieren
    
    	puts("Jetzt nicht mehr");
    	zeig( array ); // Alles Nullen
    
    	array[5][5] = 100; // Einen Wert verändern
    
    	fp = fopen( datei, "w" ); // Datei zum Schreiben öffnen
    
    	fwrite(  array, sizeof(int), INDEX * INDEX, fp );
    	fclose(fp);
    
    	fopen( datei, "r" );// Datei zum Lesen öffnen
    	fread(  array, sizeof(int),  INDEX * INDEX, fp );
    	fclose(fp);
    
    	printf("Datei %s eingelesen:\n\n" , datei );
    	zeig( array );
    
        return 0;
    }
    


  • Ja genau das ist was ich wollte. DANKE DIR SEHR!

    Hätte nur noch ne Frage zum Code. Also jedes mal wenn ich beim array einen Wert ändere, muss ich das hinterher schreiben???

    fp = fopen( datei, "w" ); // Datei zum Schreiben öffnen
    fwrite(  array, sizeof(int), INDEX * INDEX, fp );
    fclose(fp);
    

    Weil logoscherweise (nach meiner Logik) sollte es so sein.



  • Die drei Zeilen speichern doch das ganze Array, komplett.
    Du brauchst also nur ein einziges mal zu speichern.



  • Hätte noch (ne) Frage(n).
    Also die Wert im array werden doch in der Datei "test.dat" gespeichert.
    Wie kann ich die "test.dat" öffnen? (Meine jetzt nicht im prog mit fopen)

    Und wie kann ich einen wert im array(das sich in der test.dat befindet) "ausdrucken"(also im prompt fenster).
    Zum Beispiel wenn ich:

    printf("%d",array[2][3]);
    

    schreibe dann wird ja das array im prog gemeint und nicht das, was sich in der test.dat befindet.
    Muss ich nicht vor dem array[2][3] schreiben, dass sich dieses array in einer externen Datei befindet???
    Also irgendwei so

    printf("%d",(test.dat).array[2][3]);
    

    Weiss, dass das falsch ist, aber schreibe das nur damit du (Ihr) versteht was ich meine.



  • Wenn du den Array-Inhalt aus der Datei einliest, steht er hinterher (nach dem Abschnitt fopen( datei, "r" );fread(array,sizeof(int),INDEX*INDEX,fp);fclose(fp); ) in dem Array in deinem Programm. Dann kannst du damit machen, was du willst (und ihn eventuell am Ende zurück auf Platte schreiben, wenn du etwas geändert hast). Direkt auf Festplatte kann C nicht so flexibel arbeiten.



  • Das heisst, wenn ich was verändern will, muss ich das machen:

    fopen( datei, "r" );// Datei zum Lesen öffnen 
        fread(  array, sizeof(int),  INDEX * INDEX, fp ); 
        fclose(fp);
        array[2][3]=50;
        printf("%d",array[2][3]);
        fp = fopen( datei, "w" ); // Datei zum Schreiben öffnen 
        fwrite(  array, sizeof(int), INDEX * INDEX, fp ); 
        fclose(fp);
    

    Jetzt hat sich der Wert in der Datei "tes.dat" im array[2][3] auf 50 verändert.
    Ist das richtig????



  • Ok sagen wir ich speicher einen Wert so:

    fp = fopen( datei, "w" ); // Datei zum Schreiben öffnen 
    array[3][1]=12;
    fwrite(  array, sizeof(int), INDEX * INDEX, fp ); 
    fclose(fp);
    

    Wie kann ich denn diesen Wert jetzt von der test.dat denn lesen?
    So

    fopen( datei, "r" );// Datei zum Lesen öffnen 
    fread(  array, sizeof(int),  INDEX * INDEX, fp ); 
    fclose(fp);
    printf("%d",array[3][1]);
    

    😕 ???BITTE HELFT MIR??? 😕



  • Bonafide schrieb:

    Ok sagen wir ich speicher einen Wert so:

    fp = fopen( datei, "w" ); // Datei zum Schreiben öffnen 
    array[3][1]=12;
    fwrite(  array, sizeof(int), INDEX * INDEX, fp ); 
    fclose(fp);
    

    Wie kann ich denn diesen Wert jetzt von der test.dat denn lesen?
    So

    fopen( datei, "r" );// Datei zum Lesen öffnen 
    fread(  array, sizeof(int),  INDEX * INDEX, fp ); 
    fclose(fp);
    printf("%d",array[3][1]);
    

    😕 ???BITTE HELFT MIR??? 😕

    👍



  • falls das unter windoofs laufen soll: http://www.fstsoft.de/shared.htm 🙂



  • pale dog schrieb:

    falls das unter windoofs laufen soll: http://www.fstsoft.de/shared.htm 🙂

    Ist das nicht ein bisschen kompliziert, um ein integer-Array in einem main-Programm einzulesen 😃



  • proggingmania schrieb:

    Ist das nicht ein bisschen kompliziert, um ein integer-Array in einem main-Programm einzulesen 😃

    damit kann man auf dateien zugreifen wie auf arrays:

    array[i] = 123; /* setzt byte an position i in der datei auf 123 */
    

    wollte der OP nicht sowas haben?



  • pale dog schrieb:

    array[i] = 123; /* setzt byte an position i in der datei auf 123 */
    wollte der OP nicht sowas haben?
    

    Wenn ich mir jetzt noch einmal die Frage des Threadstellers durchlese:
    ...
    Wie kann ich bei C ein Array erstellen, das aber nicht in meinem C-Code ist, sondern extern in eine andere Datei ist?
    ...

    Dann kann man das sicherlich so interpretieren.
    Glaub aber nicht, das es so gemeint ist 😉

    Und puuuuh... was man da an Quellcode einbinden muss bie diesem shared memory.



  • proggingmania schrieb:

    Und puuuuh... was man da an Quellcode einbinden muss bie diesem shared memory.

    halb so schlimm, man muss nur 2 funktionen aufrufen, CreateFileMapping und MapViewOfFile...
    🙂



  • Wenn ich das ganze Englisch-Kauderwelsch nur richtig verstehen würde, dann wärs für mich vielleicht auch einfach. 😃



  • proggingmania schrieb:

    Wenn ich das ganze Englisch-Kauderwelsch nur richtig verstehen würde, dann wärs für mich vielleicht auch einfach. 😃

    mein geposteter link war doch auf deutsch 😕
    ausserdem: englisch (mindestens lesen können) ist unverzichtbar beim programmieren, sonst bleibt dir vieles verborgen...
    🙂



  • Das seh ich auch so, deshalb tappe ich ja auch oft im Dunkeln 😃



  • DANKE EUCH ALLEN (insbesondere proggingmania ), HAT FUNKTIONIERT!

    🙂



  • 🙂 🙂 👍 🙂 🙂


Anmelden zum Antworten