fseek Problem
-
csv = comma separated values
Eine .txt-Datei kann also durchaus eine CSV-Datei sein, solange sie Daten enthält, die durch Komma getrennt sind. Man benutzt den Begriff aber durchaus auch für Daten, die durch Semikola o.ä. getrennt sind.
-
aha....wieder mal etwas neues gelernt
-
Probier das mal:
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"); while (!feof(datei)) { fgets(line,2048,datei); 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);
Den Dateinamen-String natürlich durch deinen ersetzen...
-
Danke deine Methode funktioniert einwandfrei...
Leider nicht ganz das was ichmir vorgestellt habe, wahrscheinlich besser und schneller...
-
Es ist plötzlich eine Fehlermeldung aufgetaucht
[code]Unbehandelte Ausnahme bei 0x102af683 (msvcr80d.dll) in AdV.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.[code]Obwohl ich nur den Pfad geändert habe
-
08mmarte schrieb:
Es ist plötzlich eine Fehlermeldung aufgetaucht
[code]Unbehandelte Ausnahme bei 0x102af683 (msvcr80d.dll) in AdV.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.[code]Obwohl ich nur den Pfad geändert habe
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.
-
_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...