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?
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.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.