sscanf die einzige lösung?
-
Hi Leute,
ich bins mal wieder und habe mal eine frage (was auch sonst).
Ich bin dabei ein programm zu schreiben, das aus veschiedenen textdateien zeilen ausliest und die darin befindlichen werte in einem array speichert. nun hab ich ein problem. ich hab immer unterschiedlich viele werte in einer zeile stehen, z.B.
hab ich in einer zeile blablub: 14 -15.6 32 und in der anderen blablub: 7 5 3 0.2334 2.1 3.1 2 1 stehen. der einzige befehl den ich kenn lautet sscanf. allerdings muss man dort (glaub ich) immer die form der zeile mit angeben, die dann für das erste beispiel lautenwürde: "blablub: %f %f %f" und da die form für die zweite zeile anders lautet kann man das nicht mit einer funktion verknüpfen. Hat jemand einen anderen lösungsvorschlag? danke im voraus
mfg Oermel
-
-
dieser befehl speichert die gesammte zeile in einem string, was ich aber machen möchte wäre die werte einzeln in einem array speichern so, dass ich damit direkt rechnen bzw. arbeiten kann, natürlich könnte man eine funktion schreiben die das für mich macht, gibt es denn nicht schon so eine?
-
fgets ist kein Befehl, sondern eine Funktion. Was du brauchst ist fgets. Mit *scanf wirst du nur alles richtig lesen können, wenn du immer das korrekte Format angibst, aber du sagst selber, dass jede Zeile nicht dasselbe Format haben.
Du musst also dir jede Zeile holen und sie parsen.
Wenn die Werte durch Leerzeichen getrennt werden, dann kannst du man: strtok(3) nehmen, um die Werte zu lesen und selber in ein Array packen. Es gibt leider keine Funktion wie die Perl split Funktion, die genau das tut.
-
danke für die antwort. Das wir mir sehr helfen
!
PS: mit befehl meinte ich ja funktion (kam nur nicht grad drauf, da man ja weis was gemeint ist, ist das ja auch egal oder?).
-
Oermel schrieb:
([...] da man ja weis was gemeint ist, ist das ja auch egal oder?).
Nein
Greetz, Swordfish
-
Du kennst das Format zumindest soweit, daß die Zeile (nach dem "blablub:" nur aus Gleitkommawerten besteht, richtig? Dann kannst du die auch selber zerlegen und in einer Schleife per strtod() auseinandernehmen.
-
@ Swordfish
Dann werde ich demnächst genauer darauf achten was ich schreibe@ CStoll
So ähnlich habe ich mir das dann auch gedacht.