Wie würdet ihr das machen?
-
Hallo,
ich habe eine Datei, in der eine Zeile ist, die so aussieht.
Vorname#Nachname#alter
Die Datei will ich einlesen und dann jeweils die Werte speichern.
Heißt ich möchte dann im Programm 3 Variablen haben und die Werte darein speichern.
Wie mach ich das am besten?Hatte gedacht, jedes Zeichen einzeln einlesen und schauen ob es ein # ist.
Nur Vorname und Nachname können ja unterschiedlich lang sein, wie mach ich
das dann mit dem char.Danke schonmal für Ansätze.
-
Oder ich würde die Zeile einlesen und dann mit strtok auseinander nehmen. Denke da gibts keine Probleme. Aber wie speicher ich mir die Werte...
-
Ich würde die Zeile komplett einlesen und dann nach den '#' suchen (entweder per strtok oder oder strchr). Die einzelnen Bestandteile kannst du dann per strcpy() und Konsorten in ein eigenes char-Array kopieren (bzw. den Alters-Wert in eine int-Variable parsen - siehe C++ FAQ: "Einmal Zahl und zurück").
-
Hallo,
das ging ja schnell
in ein eigenes char-Array kopieren, aber die Größe des Arrays? Also ich muß ja dann erstmal ein großes Array reservieren und dann? würde es gerne nur so groß haben wie der name auch ist.
Geht nicht oder?
-
Sollte das nicht mit fscanf() einfacher gehen?
-
Da brauchst du dynamische Speicherverwaltung (Stichwort: malloc()). Und die Größe der einzelnen Felder kannst du per Zeiger-Arithmetik herausfinden (denk aber dran, daß du noch ein Byte zusätzlich für den Null-Terminator benötigst).
Edit @TactX: Klar geht das sicher, allerdings mußt du dann auch vorher wissen, wie groß die einzelnen Felder werden können
-
Haha, da hab ich gar nicht dran gedacht :p
-
Ja dann danke erstmal.
Also einlesen funktioniert auch das auseinander nehmen und jetzt noch dynamische Speicherverwaltung. Denke habs verstanden.
Danke!
-
@CStoll wenn du Zeile komplett einliest musst du auch vorher wissen, wie lang die ist. ganz dynamisch geht das nicht
-
Guter Punkt - und ein weiterer Grund für mich, bei C++ zu bleiben
(Stichwort: getline())
-
Ich würds per sscanf machen. Was meint ihr dazu?