zeile in textdatei löschen



  • hey

    hab mal eine frage zu c
    Ich möchte eine c funktion schreiben die mir eine text date einließt so ausschaut

    5555555555; 12.12.3669; 12.12.5699; jogghim; ringeding
    5555555556; 12.12.3699; 12.12.3659; joaggggm; ringeding
    5555555557; 12.12.3699; 12.12.3699; joggm; ringeding
    5555555558; 12.12.3659; 12.12.5699; jghim; ringeding

    die erste nummer bis zum ; ist die sozialversicherungsnummer und das andere andere daten
    und jetzt möchte ich dann eine zeile aus der text datei löschen hab dazu diese Funktion geschrieben

    typedef struct {  char cmd;
    	      char sozialversicherungsnummer[12];
    	 	  char geburtsdatum[12];
    		  char eintrittsdatum[12];
              char vorname[50];
    	      char nachname[50];
           }Dsatz;
    
    int datdel (Dsatz mitarbeiter,SOCKET sock)
    {
        int res,max=100,n=0,i;
        FILE *fd;
        Dsatz rueck;
        Dsatz *dsatz=NULL;
    
        fd=fopen("daten.csv","r"); 
        if(fd==NULL)
        {    
            rueck.cmd='f';
            send(sock,(void*)&rueck,sizeof(rueck),0);
            return 0;
        }
        dsatz = (Dsatz *)calloc(max, sizeof(dsatz));
    
       if(NULL == dsatz) {
          rueck.cmd='f';
          send(sock,(void*)&rueck,sizeof(rueck),0);
          printf("Kein Virtueller RAM mehr vorhanden ... !");
          return 0;
       }
    
       do {
    
              res = fscanf(fd,"%s %s %s %s %s",dsatz[n].sozialversicherungsnummer,dsatz[n].geburtsdatum,dsatz[n].eintrittsdatum,dsatz[n].vorname,dsatz[n].nachname);
              dsatz[n].sozialversicherungsnummer[10]='\0';
              printf("sozialversicherungsnummer: %s",dsatz[n].sozialversicherungsnummer);
              if(res!=EOF)
              {    
                   if(max-1>=n)
                   {
                       max=max*2;
                       dsatz = (Dsatz *)realloc(dsatz,max*sizeof(Dsatz));
                       if(NULL == dsatz)
                       {
                          rueck.cmd='f';
                          send(sock,(void*)&rueck,sizeof(rueck),0);
                          printf("Kein Virtueller RAM mehr vorhanden ... !");
                          return 0;
                       }
                   }
              }
    
              if(strcmp(mitarbeiter.sozialversicherungsnummer,dsatz[n].sozialversicherungsnummer)!=0)
              {
                  n++;
              }    
    
       }while (res!=EOF);
       fclose(fd);
       fd=fopen("daten.csv","w"); 
        if(fd==NULL)
        {    
            rueck.cmd='f';
            send(sock,(void*)&rueck,sizeof(rueck),0);
            return 0;
        }
        for(i=0;i<n;i++)
        {
            fprintf(fd,"%s; %s %s %s %s\n",dsatz[n].sozialversicherungsnummer,dsatz[n].geburtsdatum,dsatz[n].eintrittsdatum,dsatz[n].vorname,dsatz[n].nachname);
        }  
        rueck.cmd='o';  
        send(sock,(void*)&rueck,sizeof(rueck),0);
        return 1;
    }
    

    wenn er die datei gelöscht hat soll er dann eine meldung an den anderen Pc schicken.
    er schickt zwar eine Meldung zurück aber dann sind alle Einträge gelöschtund nicht nur der eine mit der richtigen sozialversicherungsnummer
    aber es funktioniert nicht habt ihr da eine idee woran das liegen könnte?

    mfg jochi



  • trikolasu schrieb:

    for(i=0;i<n;i++)
        {
            fprintf(fd,"%s; %s %s %s %s\n",dsatz[n].sozialversicherungsnummer,dsatz[n].geburtsdatum,dsatz[n].eintrittsdatum,dsatz[n].vorname,dsatz[n].nachname);
        }  
        
    }
    

    ich versteh das programm zwar nicht so ganz aber mal ne frage:
    warum verwendest du für den Index n wobei doch i in der schleife erhöht wird und n hingegen gleichbleibt.



  • danke
    Na das war wieder der dümmste fehler vom mir!



  • So oft, wie ich schon i und n verwechselt habe, finde ich das gar nicht so dumm.


Anmelden zum Antworten