Gezieltes Einlesen einer Datei !!!!!!
-
Hallo
Ich möchte nur die richtigen Werte einlesen. Ich hab in den Kommentaren geschrieben welche ich genau möchte[C-Leute] * Kommentar C 8 6 50.0 //Darf eingelesen werden C 3 50 20 //Darf eingelesen werden C 4 4 40.0 //Darf eingelesen werden * C 42 42 24 //Darf NICHT eingelesen werden C 42 6 60 //Darf eingelesen werden C 1 11 15 ; C 123 23 45 //Darf "C 1 11 15" eingelesen werden ABER "C 123 23 45" nicht .END //Danach darf NIX mehr eingelesen werden C 41 42 43 //Darf NICHT eingelesen werden
Ich schaff es die Daten einzulesen die nur mit "C" anfangen aber er ließt auch die Werte ein die davor ein Sonderzeichen haben. z.B. "* C 42 42 24 " und "; C 123 23 45"
Und ich weiss nicht wie ich das Ende ".END" deklarieren kann damit danach nix mehr eingelesen werden kann.Folgendes habe ich bereits.
struct C_Liste { int stru_Wert1; int stru_Wert2; double stru_Wert3; }; int BlaBla(FILE*Datei) { char Zeichen[20]; while ((*Zeichen=fgetc(Datei))) { if (*Zeichen != 'C') { fscanf(Datei, "%*[^\n C]"); }else { return 1; } }return 0; }; void fscan_Liste(FILE* Datei,struct C_Liste* Z_Lesen) { for (int j=0; j<=Anzahl; j++) { BlaBla(Datei); fscanf(Datei, "%i%i%lf", &Z_Lesen->stru_Wert1, &Z_Lesen->stru_Wert2, &Z_Lesen->stru_Wert3); Z_Lesen++; } }
Bitte nur konstruktive Vorschläge und Anregungen
Danke
-
Du kannst z.B. zeilenweise (mit
fgets
) lesen und dann in aller Ruhe die Entscheidungen treffen.Das Ende kannst du dann mit strncmp oder strstr suchen und dann die Leseschleife beenden.
Die Werte kannst du dann mit
sscanf
auslesen.
-
Was sind denn das für Daten?
Okay
[blabla]
beginnt irgendeine Gruppierung, die von
.END
beendet wird. Richtig?
*
und
//
starten einen Kommentar - alles bis zum Zeilenende wird ignoriert.
C Zahl Zahl Zahl
beschreibt ein Objekt. Was?
UndC Zahl Zahl Zahl ; C Zahl Zahl Zahl
bedeutet was?
Sind das immer floats oder immer ints? Floats und ints gemischt? Zwei ints, dann ein float? Was?Dich interessieren nur Objekte innerhalb einer 'Gruppierung'. Und es gibt nur C... Objekte, nicht auch noch L... Objekte, oder XYZ... Objekte?
Mir fiele es leichter Dir zu helfen, wenn das Kind einen Namen hätte.
-
Ja ".END" heisst das ab dort nix mehr eingelesen werden darf
Einlesen möchte ich nur die "C 4 6 20.00" Werte. Das sind die 2 Int Werte und 1 float Wert. Sieht man doch auch hier
fscanf(Datei, "%i%i%lf", &Z_Lesen->stru_Wert1, &Z_Lesen->stru_Wert2, &Z_Lesen->stru_Wert3);
Sobald das "C" ein Sonderzeichen davor hat darf es nicht eingelesen werden.
Deswegen darf bei der ZeileC 1 11 15 ; C 123 23 45 //Darf "C 1 11 15" eingelesen werden ABER "C 123 23 45" nicht
Nur "C 1 11 15" eingelesen werden.
DirkB schrieb:
Du kannst z.B. zeilenweise (mit
fgets
) lesen und dann in aller Ruhe die Entscheidungen treffen.Das Ende kannst du dann mit strncmp oder strstr suchen und dann die Leseschleife beenden.
Die Werte kannst du dann mit
sscanf
auslesen.Ich weiss das es auch diese Befehle dafür gibt aber ich weiss nicht wie ich sie einbinden soll.
-
Dein pubertäres "!!!!!!" im Titel kannst du dir schenken.
Das animiert hier niemanden dir zu helfen, im Gegenteil.- du liest einfach zeilenweise mit fgets
- diesen String auswerten mit sscanf:
-- Endebedingung ist: ".END" als erstes Wort kommt in der Zeile vor
-- wenn erstes Wort "C" ist, wertest du 3 folgende numerische Werte ausDas ist alles trivial und absolutes Anfängerniveau.
char zeile[1000],wort[1000]; int i,j; double d; FILE *f = fopen(...,"r"); while(fgets(zeile,1000,f)) /* JEDE Zeile lesen */ { /* und auswerten */ if( sscanf(zeile,"%s",wort),!strcmp(wort,".END") ) break; /* Abbruchbedingung */ if( 4==sscanf(zeile,"%s%d%d%lf",wort,&i,&j,&d) && !strcmp(wort,"C") ) printf("\nErfolgreich gelesen: %d %d %f",i,j,d); ... } fclose(f);
-
Wutz schrieb:
Dein pubertäres "!!!!!!" im Titel kannst du dir schenken.
Das animiert hier niemanden dir zu helfen, im Gegenteil.- du liest einfach zeilenweise mit fgets
- diesen String auswerten mit sscanf:
-- Endebedingung ist: ".END" als erstes Wort kommt in der Zeile vor
-- wenn erstes Wort "C" ist, wertest du 3 folgende numerische Werte ausDas ist alles trivial und absolutes Anfängerniveau.
Ok ich wusste nicht das hier nur Fragen für Fortgeschrittene geklärt werden und man keine leichten Fragen stellen darf. Das nächste mal frag ich einfach wo anders nach.
Trotzdem Vielen Dank es hat mir sehr geholfen.
-
tante123 schrieb:
Ja ".END" heisst das ab dort nix mehr eingelesen werden darf
Einlesen möchte ich nur die "C 4 6 20.00" Werte. Das sind die 2 Int Werte und 1 float Wert. Sieht man doch auch hier
fscanf(Datei, "%i%i%lf", &Z_Lesen->stru_Wert1, &Z_Lesen->stru_Wert2, &Z_Lesen->stru_Wert3);
Sobald das "C" ein Sonderzeichen davor hat darf es nicht eingelesen werden.
Du hast mich missverstanden. Ich wollte wissen, was das für Daten sind (Temperaturen/Positionen/Farben/Geldbeträge/...). Du paraphrasierst nur, was Du schon im Eingangspost geschrieben hast.
Ob es jetzt nur * oder auch // Kommentare gibt weiss ich immer noch nicht.
Auch was die Zeile mit dem ';' bedeutet weiss ich immer noch nicht.
Gibt es mehrere '[xyz]' ... '.END' Blöcke? usw. usf.Naja: Du hast ja mittlerweile einige Vorschläge bekommen.