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...