Auswahl eines Datensatzes



  • Moin!

    Also ich habe volgendes Problem. In meinem Programm schreiben ich Daten in eine Datei ein und gebe diese komplet aus. Jetzt soll ich auch einen bestimmten Datensatz ausgeben, indem ich den Name eingebe. Ich bekomme es hin den ersten Datensatz zu bekommen, wenn ich Name1 eingebe.

    Kann mir jemand helfen?

    Hier kommt mein Quellcode:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    	FILE *getrecord();
    
    	char m_read_Data[50];
    	char m_Name[50];
    	char m_verg_Name[50];
    
    void main ( void ) 
    	{ 
    
        FILE *datei;
    	struct datensatz 
    		{
    		char Name[50];
    		char Nr[50];
    		char PLZ[50]; 
    		}structur[4]  =  {{"Name1","10","11111"},
    						  {"Name2","20","22222"},
                              {"Name3","30","33333"},
                              {"Name4","40","44444"}};
    
    		datei = fopen ( "test.dat" , "w+" );
    		if (datei == NULL ) 
    			{
    			printf ("\nFehler: Die Datei konnte nicht geöffnet werden!\n");
    			} 
    		else
    			{
    //		Write data into file
    		    fprintf (datei, "Name = %s Nr= %s PLZ = %s \n", structur[0].Name, structur[0].Nr, structur[0].PLZ);
    			fprintf (datei, "Name = %s Nr= %s PLZ = %s \n", structur[1].Name, structur[1].Nr, structur[1].PLZ);
    		    fprintf (datei, "Name = %s Nr= %s PLZ = %s \n", structur[2].Name, structur[2].Nr, structur[2].PLZ);
    		    fprintf (datei, "Name = %s Nr= %s PLZ = %s \n", structur[3].Name, structur[3].Nr, structur[3].PLZ);
    //		Read data
    			rewind(datei);	//Dateizeiger an den Dateianfang positionieen
    			fscanf(datei," Name = %s Nr = %s PLZ = %s",structur[0].Name, structur[0].Nr, structur[0].PLZ);
    			fscanf(datei," Name = %s Nr = %s PLZ = %s",structur[1].Name, structur[1].Nr, structur[1].PLZ);
    			fscanf(datei," Name = %s Nr = %s PLZ = %s",structur[2].Name, structur[2].Nr, structur[2].PLZ);
    			fscanf(datei," Name = %s Nr = %s PLZ = %s",structur[3].Name, structur[3].Nr, structur[3].PLZ);
    //		Outout record
    				printf ("Nachname: %s Str-Nr: %s PLZ: %s \n", structur[0].Name, structur[0].Nr, structur[0].PLZ);
    				printf ("Nachname: %s Str-Nr: %s PLZ: %s \n", structur[1].Name, structur[1].Nr, structur[1].PLZ);
    				printf ("Nachname: %s Str-Nr: %s PLZ: %s \n", structur[2].Name, structur[2].Nr, structur[2].PLZ);
    				printf ("Nachname: %s Str-Nr: %s PLZ: %s \n", structur[3].Name, structur[3].Nr, structur[3].PLZ);
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
    //		Bestimmten Datensatz auslesen
    
    			printf ("Bitte geben Sie den Namen vom Gewuenschten Datensatz ein:\n");
    			scanf("%s", &m_Name);
    			rewind(datei);
    			fscanf(datei,"Name = %s", structur[0].Name);
    
    //		Sind beide Arrays gleich
    			if(memcmp(structur[0].Name, m_Name, sizeof(structur[0].Name)) == 0 )
    				{
    				printf ("Datensatz lautet: %s Str-Nr: %s PLZ: %s\n", structur[0].Name, structur[0].Nr, structur[0].PLZ);
    				}
    			else
    				{
    				printf ("Der Name war nicht korrekt\n");
    				}
    
    			fclose (datei);  
    		}
    }
    


  • hi !
    du kannst die namen in einer schleife abfragen.



  • fwrite und fread bietet eine möglichkeit mehrere strukturen in einem rutsch zu
    lesen/schreiben
    wenn du mit deiner methode mehrere hundert namen lesen/schreiben willst, dann mal viel spass beim tippen. 😃 🤡

    mal so als anregung:

    #include <stdio.h>
    struct datensatz 
    { 
        char Name[50+1]; 
        unsigned Nr; 
        char PLZ[5+1]; 
    }daten[4] =
    {
      {"Name1", 1, "11111"}, 
      {"Name2", 2, "22222"}, 
      {"Name3", 3, "33333"},
      {"Name4", 4, "44444"}
    }; 
    
    int speichern( int n, char* fname )
    {
        FILE* fp;
        if ( (fp = fopen( fname, "w")) == NULL )   
        {
             fprintf( stderr, "Can't open file." );  return 1;
        }
    
        if( n != fwrite( daten, sizeof(struct datensatz), n, fp ) )
        {
            fprintf( stderr, "Failed on fwrite." );
            fclose(fp);
            return 1;    
        }
        fclose(fp);
        return 0;
    }
    
    int name_suchen( char *fname, int n, char* name )
    {
        FILE* fp;
        int i = 0;
        if ( (fp = fopen( fname, "r")) == NULL )   
        {
             fprintf( stderr, "Can't open file." );  return 1;
        }
    
        if( n != fread( daten, sizeof(struct datensatz), n, fp ) )
        {
            fprintf( stderr, "Failed on fread." );
            fclose(fp);
            return 1;    
        }
        fclose(fp);
    
        for ( i = 0; i < n; i++ )
        {
            if ( strcmp( daten[i].Name, name ) == 0 )
            {
               printf("%s gefunden.\n", name );
               return 0;      
            }      
        }
        printf( "%s nicht gefunden.\n" );
        return 1;
    
    }
    
    int main(void)
    {
        int n = 4;
        char path[256+1];
        if ( speichern( n, "test.dat" ) ) return 1;
        printf("%d Datensaetze gespeichert %s\n" , n, getcwd(path, sizeof(path)-1) );
    
        name_suchen ( "test.dat", n, "Name3" );
        name_suchen ("test.dat", n, "RUMPELSTILZCHEN" );
        getchar();
        return 0;
    }
    

Anmelden zum Antworten