Externe Datei in Form von Array!



  • Hallo,
    hätte ne Frage: Wie kann ich bei C ein Array erstellen, das aber nicht in meinem C-Code ist, sondern extern in eine andere Datei ist?
    Will, dass ich auf dem array zugreifen können und da was ändern kann.

    Danke schon voraus auf eure Antworten!!



  • extern.h:

    #ifndef _EXTERN_H
    #define _EXTERN_H
    
    char extern_array[50] = {"Ich bin extern."};
    
    #endif _EXTERN_H
    

    Programm:

    #include <stdio.h>
    #include "extern_array.h"
    
    int main()
    {
    	puts(extern_array);
    return 0;
    }
    

    MfG,
    der ganz weit weg ist ( extern )



  • Danke für deine Antwort, aber wie kann ich auf diesem array zugreifen also verändern??



  • Und will eigentlich keinen text ausgeben, sondern ein array mit zahlen.
    Zum Beispiel (externe file)

    int array[30][30];
    array[23][21]=345;
    

    und dann beim prog:

    int main(){
             .
             .
             .
    array[23][21]=20;
    

    Ja und hier soll jetzt die Zahl geändert werden, also von 345 zu 20.
    Wie könnte ich das machen???



  • So wie du es beschrieben hast.



  • Funktioniert nicht!
    Hab also das:

    /*extern.h*/
    #ifndef _EXTERN_H 
    #define _EXTERN_H 
    
    char extern_array[50][30];
    extern_array[20][12]=23;
    
    #endif _EXTERN_H
    

    und wenn ich jetzt beim prog das schreibe:

    #include <stdio.h> 
    #include "extern.h" 
    #include <stdlib.h>
    
    int main() 
    { 
        extern_array[20][12]=43;
    
        system("PAUSE"); return EXIT_SUCCESS; 
    }
    

    dann meldet der compiler einen Fehler.
    Was kann ich machen?



  • Ja, sorry so einfach gehts wohl doch nicht.

    Dann schmeiss mal die Zeile 6 aus extern.h raus und ändere das Array über
    Funktionen:

    void wert_aendern( int i, int j, int wert )
    {
    	extern_array[i][j] = wert;
    }
    

    Das Array muss mit der extern-Anweisung in den entsprechenden Dateien bekannt gemacht werden:

    extern int extern_array[50][50];
    


  • Meinst su jetzt , dass die funktion wert_aendern im Programm-Code stehen soll oder in der headerdatei??



  • In wie vielen Dateien soll denn das Array vorkommen `?



  • Verstehe deine Frage nicht Gnaz, aber glaube eine.
    Also das array soll ja nur die zahlen speichern, die man mit dem Prog hinzufügen/ändern kann.



  • Eine, dann reicht es wenn du deine extern.h so schreibst:

    /*extern.h*/
    #ifndef _EXTERN_H
    #define _EXTERN_H
    
    int extern_array[30][30] = {0};
    
    #endif  // _EXTERN_H
    


  • Danke, hat funktioniert. Dieser Code mit der headerdatei hat auch 56 angezeigt:

    #include <stdio.h> 
    #include "extern.h" 
    #include <stdlib.h>
    
    void wert_aendern( int i, int j, int wert ) 
    { 
        extern_array[i][j] = wert; 
    } 
    
    int main() 
    { 
        wert_aendern(5,6,56);
        printf("%d",extern_array[5][6]);
    
        system("PAUSE"); return EXIT_SUCCESS; 
    }
    

    Aber eigentlich wollte ich die zahl 56, also dass, das:

    extern_array[5][6]=56;
    

    in der Headerdatei gespeichert wird, damit ich nach beendigung des progs, den Wert da zu stehen hab. Wie kann ich das machen?



  • 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????


Anmelden zum Antworten