csv datei und sscanf
-
hallo!
ich habe ein problem beim auslesen von csv dateien.
und zwar:
eine zeile in der csv datei sieht wie folgt aus:
nachname;vorname vorname;geschlecht;alter;plz
ich öffne die datei, und lese zeilenweise aus in einen char* zeile.
dann mache ich ein sscanf, das wie folgt aussieht;
sscanf(zeile, "%s;%s;%s;%d;%s", nachname, vorname, geschl, &alter, plz);
jetzt steht im nachname die ganze zeile drin, weil er ';' nicht als trennzeichen kennt, vermute ich mal, also hab ich die zeile mal so aufgebaut:
nachname - vorname vorname - geschlecht - alter - plz
sscanf(zeile, "%s - %s - %s - %d - %s", nachname, vorname, geschl, &alter, plz);
hierbei habe ich das problem, dass er das leerzeichen zwischen 2 vornamen nicht checkt und erst wieder was falsches drin steht.
hat von euch jemand eine idee, wie ich das lösen könnte?
wenn jemand 2 vornamen hat, dann sollte im vorname zum beispiel: "stefan michael" drinstehendanke schonmal,
mfg
-
phuN schrieb:
...
ich öffne die datei, und lese zeilenweise aus in einen char* zeile.
...holst du dir den speicher für die zeile mit malloc oder wie machst du das?
mit sscanf müsste das klappen, so wie du das geschrieben hast.
-
so, in einer while schleife:
fgets(zeile, sizeof(zeile), in)
-
Hallo phuN,
ich hab' das Problem so gelöst:
sscanf (zeile, "%[^;];%[^;];%[^;];%i;%s", nachname, vorname, geschl, &alter, plz);
Zur Erklärung:
Bei den ersten drei Zeichenketten liest er jeweils bis zum Semikolon. Danach ein Integer und ein weiterer String.Gez. monstermunchkin
-
Es funktioniert!!
genau das was ich wollte!
vielen, vielen Dank!!
-
monstermunchkin schrieb:
Hallo phuN,
ich hab' das Problem so gelöst:sscanf (zeile, "%[^;];%[^;];%[^;];%i;%s", nachname, vorname, geschl, &alter, plz);
Zwar alt, aber hab nichts andres gefunden dazu:
Wenn ich nun folgenden String vorliegen habe:
zeile[] = { "Meier;Peter;;15;10023"};
Wie sage ich dem Compiler nun, dass ich 0 bis unendlich Zeichen bis zum nächsten Strichpunkt erwarte und nicht 1 bis unendlich?
Denn obige Situation führt bei mir dazu, dass Alter und Postleitzahl nicht gefüllt sind...