Eine Datei mit Datensätzen(int,string,float) auslesen + in struct schreiben?
-
Hallo ersteinmal!
Ich habe eine Datei in der Datensätze zeilenweise gespeichert sind. Also z.B.
"1 Mark Mustermann 3.1"
Jetzt möchte ich gerne dies einlesen und in einer struct speichern.Wie stellt man sowas an?
Besten Dank schon einmal
Gruß
JoeF
-
Schau Dir mal die Funktionen fscanf() bzw. fgets() und sscanf() an. Damit sollte es eigentlich kein Problem mehr sein.
-
Hallo!
Wenn ich fgets() richtig verstehe, muß ich ja eine länge angeben, die er einlesen soll. Das bedeutet also für mich, dass ich meine Datei, die eingelesen werden soll, formatiert abspeichern muß.
Also auf deutsch, z.B. immer die ersten 3 zeichen für eine Zahl, die nächsten 20 Zeichen für einen String usw. usw. Da ich sonst ja nicht weiß von wo wieviele Zeichen ich einlesen mußOder habe ich es falsch verstanden?
Gruß
JoeF
-
fgets() liest bis zum Zeilenende oder bis die angegebene Anzahl an Zeichen verarbeitet wurde, wenn man mal von EOF oder möglichen Fehlern absieht.
-
OKay dann lese ich also die ganze Zeile mit fgets() ein, sie wird in einem String gespeichert und ich zerpflücke dann den String und schreibe dass dann in meinen struct so wie ich es brauche.
Ist das ein Ansatz?
Gruß
JoeF
-
JoeF schrieb:
OKay dann lese ich also die ganze Zeile mit fgets() ein, sie wird in einem String gespeichert und ich zerpflücke dann den String und schreibe dass dann in meinen struct so wie ich es brauche.
Ist das ein Ansatz?
...Treffer
-
Danke für deine Geduld!
Gruß
JoeF
-
du liest mit fgets in einen Stringbuffer ein und verarbeitest dann das gelesene
typedef struct
{
int Nummer;
char Name[40];
float Value;
} DATEN_STRUCT; // Nur ein Beispiel, wie die Struktur aussehen soll musst du wissen....
void func1(void)
{
Daten_Struct Daten;
char InputData[128+1];
char String1[128+1];
char String2[128+1];
char String3[128+1];
FILE *InFile;
int i;
double w;
// ....
fgets(InputData,128,InFile);//Der gelesene Buffer InputData hat jetzt folgenden Inhalt "1 Mark Mustermann 3.1\n"
/*
Diesen Inhalt musst du jetzt in 3 Teile zerlegen
String_1: "1"
String_2: "Mark Mustermann"
String_3: "3.1\n"
jetzt kannst du die einzelnen Teile
konvertieren und in die Datenstruktur eintragen
*/sscanf(Sring_1,"%i",&i);
Daten.Nummer=i;
strcpy(Daten.Name,String_2)
sscanf(String_3,"%lf",&w);
Daten.Value=w;
}Die Stücke hier oben sind kein vollständiger Code sondern nur Ausschnitte, die Functionsaufrufe sollten aber richtig sein
Sie sollen dir eine Anhalt geben wonach du in der Hilfe, Tutorial oder Buch suchen solltst.Ein Vorschlag noch, damit du den String besser Zerlegen kannst solltest du die Elemente nicht mit Leerzeichen trennen, sondern einen anderen
Delimiter wählen
"1:Mark Mustermann:3.1"Du könnest dann den String von vorne untersuchen und jeweils am Delimiter ":" trennen.
An unsere Spezialisten Der Code ist nicht auf Effektivität ausgelegt, eher auf einfache Lesbarkeit
-
Danke für dein Bespiel, so in etwa habe ich das jetzt auch verstanden.
Wird wohl jetzt kein Problem mehr sein.
Danke an euch beiden.
Gruß
JoeF