Dateihandling....String Wörter in der Datei ändern :( ????????



  • So, ich habe da mal ne kleine Frage zum Dateihandling..

    ICh habe also ein paar Wörter über die Tastertur eingelsen..und auch erfolgreich gespeichert...Kann sie auch wunderbar auslesen

    So, jetzt meine Farge..ich woll bestimmte Wörter ändern. Also springe ich zu diesem wort und gebe ein neues ein..Aber jetzt passiert folgendes. Die ganze Datei geht irgendwie kaputt...wenn ich sie auslese sind da nur komische Zeichen. wenn ich die Textdatei so öffne steht da zwar das neue wot, aber dahinter ist nur müll und davor ist alles weg.. was nun.

    Hir mein Code (einmal einlesen dann lesen und dann änmdern)

    Ps..sry wenn das bei ändern so komisch aussieht, ich habe versucht mit Skip zu arbeiten..aber davon haber ich keine ahnung..währe nett wenn ichr mit mal erklärt, wie ich die aendern fkt umändern soll

    void Initialisieren(void)
    {
    int x=0,y=0;
    int index=0;
    FILE *fhd;
    fhd=fopen("c:\\P12A1.txt","wb+");
    char Land[anzahl][max_string_laenge];
    char Stadt[anzahl][max_string_laenge];

    char* Land1[anzahl];
    for(index=0;index<anzahl;index++)
    {
    Land1[index]=Land[index];
    }

    char* Stadt1[anzahl];
    for(index=0;index<anzahl;index++)
    {
    Stadt1[index]=Stadt[index];
    }

    for(x=0;x<anzahl;x++)
    {
    printf("Bitte geben sie ein Land ein : ");
    gets(Land1[x]);
    printf("Bitte geben sie die Hauptstadt an : ");
    gets(Stadt1[x]);
    y=y+1;
    fwrite(Land1[x],sizeof(char),50,fhd);
    fwrite(Stadt1[x],sizeof(char),50,fhd);

    if(strcmp(Land1[x],Stadt1[x])==0)
    {
    x=anzahl;
    }
    }

    fclose(fhd);

    printf(" \nEingabe beendet\n");
    read(y);

    }

    void Aendern(char** Land1,char** Stadt1)
    {
    int x=0,y=0,position=0,skip,distanz_neu,distanz_alt=0;
    FILE *fhd;
    fpos_t akt_pos;
    char Neu[50];
    fhd=fopen("c:\\P12A1.txt","wb+");

    printf("Wenn sie was aendern moechten, dann geben sie bitte die gewuenschte Pos. an : ");
    scanf("%i",&position);

    printf("\nDas Land %s aendern in \t=> ",Land1[position]);

    scanf("%s",&Neu);
    //strcpy(Land1[position],Neu);
    //printf("Die Stadt %s aendern in \t=> ",Stadt1[position]);
    //scanf("%s",&Neu);
    skip=(position)*sizeof(char);
    //fsetpos(fhd,&skip);

    fseek(fhd,skip,SEEK_SET);
    //strcpy(Stadt1[position],Neu);
    fwrite(Neu,sizeof(char),50,fhd);

    //fwrite(Stadt1[2],sizeof(char),50,fhd);
    fclose(fhd);

    printf(" \nEingabe beendet\n");
    }

    void read(int y)
    {

    FILE *fhd;

    char Land[anzahl][max_string_laenge];
    char Stadt[anzahl][max_string_laenge];
    int index=0,x=0,auswahl=0;

    char* Land1[anzahl];
    for(index=0;index<anzahl;index++)
    {
    Land1[index]=Land[index];
    }

    char* Stadt1[anzahl];
    for(index=0;index<anzahl;index++)
    {
    Stadt1[index]=Stadt[index];
    }

    fhd=fopen("c:\\P12A1.txt","rb+");

    for(x=0;x<y-1;x++)
    {
    fread(Land1[x],sizeof(char),50,fhd);
    fread(Stadt1[x],sizeof(char),50,fhd);
    // fclose(fhd);

    printf("%i.\t%s\t\t",x,Land1[x]);
    printf("%s\n",Stadt1[x]);
    //printf("%i.\t%s\t\t",x,Land1[0]);
    }
    fclose(fhd);
    printf("Wollen sie Aenderungen vornehmen ? \n");
    printf("1. Ja\n");
    printf("2. Nein\n");
    scanf("%i",&auswahl);
    if(auswahl==1) Aendern(Land1,Stadt1), read(y);

    }



  • Ich würde empfehlen die verschiedenen modes der fkt fopen() mal anzusehen!

    Du willst ein File editieren, und öffnest es in deiner fkt:

    void Aendern(char** Land1,char** Stadt1) 
    { 
    ..
    fhd=fopen("c:\\P12A1.txt","wb+");
    ..
    }
    

    mit dem Modus "w"(write) gut und recht! Aber das Problem ist, dass bei diesem mode, im Falle das dieses File schon existiert, der Inhalt einfach zerstört wird. Somit würde ich dir raten, es mit dem mode r+ (read/write) zu versuchen.
    ich denke, dann solltest du keine Probleme mehr haben.

    gruss


Anmelden zum Antworten