Hallo, ich möchte gerne wissen wie ich Daten aus einer Datei einlesen kann und in ein struct bekomme?? Es handelt sich um verschiedene Datentypen... char, float, int,... Wäre wirklich froh über Eure Antworten... Liebe Grüße
kommt auf die Datei an. Entweder liegen die Daten dort binär vor, dann mit fread() lesen (in der Hoffnung, daß die Daten dort auch im richtigen Layout liegen, je nach System und Compiler beim Erzeugen). Oder die Daten sind dort als Text abgelegt, dann Element für Element z.B. mit fscanf() lesen. Wenn du nicht mehr weißt, als aus deiner Frage hervorgeht, wirst du nochmal nachdenken müssen. Falls du doch mehr weißt: wieso verrätst du es dann nicht?
Float-Zahlen, die einen Punkt enthalten, mit Punkten voneinander zu trennen, ist ziemlich schlau :-(
Okay ;) also ein bisschen genauer habe hier sowas : struct adres { char name[20] ; char str [20] ; char ort [20] ; } dann noch dieses : struct pers { char artikel [20] ; int anzahl [3] ; float preis [6] ; } die datei sieht folgendermaßen aus : (doch semikolon, sorry) Juergen Wolf;Hansestr 21;22222 Musterstadt; Buch; 2; 20.20; ; Martin Gans;Gartenstr 23;11111 Berlin; Nutella; 3;2.10; Marmelade;1;3.99; ; usw . . . ich komm hier leider nicht weiter..... :(
Daniel schrieb: > struct pers > { > char artikel [20] ; > int anzahl [3] ; > float preis [6] ; > } BIst du dir da ganz sicher, dass ein pers 3 verschiedene Anzahlen und 6 verschiedene Preise haben soll? > die datei sieht folgendermaßen aus : (doch semikolon, sorry) > > Juergen Wolf;Hansestr 21;22222 Musterstadt; > Buch; 2; 20.20; eine Zeile mit fgets als Ganzes einlesen. Dadurch bekommt man die Zeile als einzigen String eingelesen. Danach im String die ';' suchen und die Einzelteile als Strings entsprechend umkopieren. Bei den Zahlen werden natürlich nicht die Teilstrings umkopiert, sondern die Teilstrings in die entsprechenden Zahlen umkonvertiert und dieses Ergebnis in der Struktur abgelegt. fgets + strtok sind deine Freunde fscanf könnte man auch nehmen. Da müsste man dann allerdings dem %s beibringen, dass es bei einem ; in den Daten dieses als Ende eines Teilstrings wertet. Mit den regex-Möglichkeiten, die es seit C99 gibt, sollte das machbar sein. Persönlich bevorzuge ich allerdings immer noch die alte fgets + strtok Methode. Ist beim Error-Handling, Ausgabe einer sinnvollen Fehlermeldung und Wiederaufsatz der Leseschleife nach einem Fehler einfach simpler zu handhaben.
einfacher ginge es mit fscanf, wenn man die Formatierung verstanden hat. Das ist hier aber vermutlich nicht der Fall. Sieht eh nach Hausaufgabe aus, also würde ich mal wieder pauschal auf das richtige C-Buch verweisen...
Ja lieber Klaus, da hast du recht, deswegen versuche ich mir ja Hilfe zu holen um es endlich zu verstehen..... Natürlich war mein erster Blick der ins Buch, nur bin ich leider nicht so erfahren was das Programmieren angeht, daher fällts mir nicht so leicht das gelesene sofort richtig anwenden zu können... Vielen Dank für den Tipp Karl, das habe ich natürlich falsch gemacht... Ich danke euch für eure Antworten :)
Klaus Wachtler schrieb: > einfacher ginge es mit fscanf, wenn man die Formatierung verstanden > hat. Das ist hier aber vermutlich nicht der Fall. Da muss ich mich auch an der Nase nehmen :-) Im "alten" C gab es die ausgefuchsteren Möglichkeiten der Formatierangaben nicht. Wäre: fscanf(input, "%[^;]%[^;]%[^;\n]\n", str1, str2, str3); korrekt? (Ich bleib trotzdem bei der althergebrachten Methode, mit fgets eine komplette Zeile lesen und dann als String zerlegen :-) Schon alleine aus dem Grund, da ich dann auch Fehlerfall weiß, wo der Filepointer steht.
... das kann man bei fscanf() auch erfahren, wenn man will (über %n) :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.