fseek Problem



  • _matze schrieb:

    In was denn? Existiert die Datei? Du musst eigentlich auch checken, ob fopen erfolgreich war. Wenn NULL zurückgegeben wird, ist was schiefgelaufen und du musst abbrechen.

    Es gibt mir beide Adressen zurück, aber sofort danach kommt die Fehlermeldung...



  • Welche beiden Adressen? Willst du 2 Dateien öffnen? Fragst du mittlerweile datei auf NULL ab?

    EDIT: Zur Not poste deinen ganzen Code einfach nochmal.



  • 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