fseek Problem



  • Sorry wenn es ein Missverständnis gibt...
    im Moment sind in meiner Datei zwei Adressen...Name Vorname etc.

    Ja ich frage auf null ab...



  • Ach so, ich dachte du meinst 2 FILE-Pointer. 😉

    Also meine Testdatei sieht so aus:

    Hans;Wurst;Wurststr. 6;12345;Ortstadt;
    Reiner;Unsinn;Blödenstr. 12;54321;Dummdorf;
    

    Mit der Datei und meinem Code stürzt nix ab. Siehst du irgendwelche Unterschiede? Sonst poste nochmal deinen Code und deine Datei.



  • Einen bzw. zwei Unterschiede sehe ich....
    Meine Adressen werden nicht mit einem Semikolon abgeschlossen sondern nur mit '\n'...könnte das der Fehler sein??

    EDIT:
    ➡ Habs getestet ist nicht der Fehler...



  • 08mmarte schrieb:

    Einen bzw. zwei Unterschiede sehe ich....
    Meine Adressen werden nicht mit einem Semikolon abgeschlossen sondern nur mit '\n'...könnte das der Fehler sein??

    EDIT:
    ➡ Habs getestet ist nicht der Fehler...

    Nein, das Problem ist, dass meine letzte Zeile nicht mit CR/LF abgeschlossen war. Bei dir ist das der Fall, so dass er noch ein drittes Mal in die Schleife geht...

    EDIT: Hab jetzt Pause, du kriegst bestimmt ne Lösung hin, ne? 😉

    EDIT2: Hmpf! Pause verzögert sich... Na gut, prüf nach fgets einfach noch mal auf EOF, dann passt es.



  • CR/LF könntest du mir das noch erklären??



  • 08mmarte schrieb:

    CR/LF könntest du mir das noch erklären??

    Das steht für Carriage Return (Wagenrücklauf, der Cursor geht wieder nach links, ASCII 13) und Linefeed (Zeilenvorschub, ASCII 10). In C kannst du in Strings auch "\r\n" verwenden. '\r' für CR und '\n' für Linefeed/Newline.



  • okey...



  • if (fgets(line,2048,datei)==NULL)
    

    Ich teste so auf NULL...Aber wenn ich das amche liest es mir jede zweite Adresse nicht...und das fseek will nicht recht funktionieren könntest du mir nochmals helfen...



  • Kein Problem! Meine Variante sieht so aus:

    FILE *datei;
    	char Name[1024];
    	char Vorname[1024];
    	char Strasse[1024];
    	char PLZ[1024];
    	char Ort[1024];
    	char line[2048];
    	char sep[]=";";
    	char *token;
    
    	datei = fopen("c:\\myTemp\\mmarte.txt", "r"); 
    	if(datei==NULL) {
    		return;
    	}
    
    	while (!feof(datei)) {
    		fgets(line,2048,datei);
    		if(feof(datei)) {
                break;
            }
    		token=strtok(line,sep);
    		strcpy(Name,token);
    		token=strtok(NULL,sep);
    		strcpy(Vorname,token);
    		token=strtok(NULL,sep);
    		strcpy(Strasse,token);
    		token=strtok(NULL,sep);
    		strcpy(PLZ,token);
    		token=strtok(NULL,sep);
    		strcpy(Ort,token);
    		printf ("%s %s\n%s\n%s %s\n\n", Name, Vorname, Strasse, PLZ, Ort);
    	}
    	fclose(datei);
    


  • Ja eine gute methode...werd ich sofort probieren

    EDIT: Funktioniert problemlos...danke vielmals



  • Wie kann ich eine bestimmte Zeile in meinr Datei löschen oder bearbeiten??

    mit fwrite oder fread???



  • Hmm, ganze Datei in einen String lesen, Datei löschen, Zeile im String löschen, Datei neu schreiben. Keine Ahnung, ob es in C einen einfacheren Weg gibt...



  • ^^löschen geht nicht, nur überschreiben. dabei kannst du die zeile auch nicht verlängern, verkürzen oder sowas. wenn du das oft machen willst, dann nimm besser ein datenbanksystem, sqlite oder sowas.
    🙂



  • Gut danke...


Anmelden zum Antworten