.txt in struct mit array member einlesen



  • Atrom schrieb:

    Vllt könnt ihr mir helfen, wie ich es hinbekomme, dass es mir die schoki.txt ordentlich einliest und ich statt der Namen der Zutaten, welche für die jeweilige Sorte benötigt werden, eine ID einliest.

    Hallo,

    das kannst du sicherlich auch selber:

    size_t nameToIndex(const std::string& name)  // ggf. array mit übergeben
    {
    ...
    }
    ...
    size_t index = nameToIndex(readName);
    

    ps: Code-Vorgabe sieht schrottig aus. Nach dem Kurs unbedingt ein gutes Buch lesen, damit sich der Mist nicht verfestigt.



  • Danke erstmal für den Tipp. Ja, dass das schrottig aussieht, mag sein...aber anders wird es uns auch nicht gezeigt.



  • Zum Problem selber: Variablen sollten immer so lokal wie möglich sein, das zeigt sich in deinem bei j und file/file_2. Wenn du keine Funktionen verwenden möchtest, kannst du auch Scopes einfügen.

    for(j; j<3; j++) // so lokal wie möglich, also int j=0;.., schlecht: nackte Zahlen wie auch 5&7, etwas besser wäre es, Konstanten zu verwenden
        {
            for(int i=0; i<5; i++) // richtig, hier undurchsichtig, da dieses i Darüberleigendes überdeckt 
            {
    
            feld_2[j].zutat_id[i] = i;      //Vergeben einer ID für die jeweilige Zutat
            }
        }
    
    //  ifstream file_2("schoki.txt") <- besser direkt so
        ifstream file_2;                    //Einlesen der Datei "schoki.txt" mit 3 Einträgen
    
        file.open("schoki.txt"); // schlecht: sollte wohl file_2 sein
        if(file.is_open()){ //
    
            file_2 >> feld_2[j].name; // s.o., hier das resultierende Problem mit dem stream und auch j, j ist hier 3, der Code sollte wohl in einer Schleife stehen
            file_2 >> feld_2[j].gewicht;
            file_2 >> feld_2[j].menge_in_prozent[5];
        }
    

    Das ist nur, was mir direkt ins Auge gesprungen ist.



  • Atrom schrieb:

    Danke erstmal für den Tipp. Ja, dass das schrottig aussieht, mag sein...aber anders wird es uns auch nicht gezeigt.

    Ich weiss, deshalb ja auch 'Code-Vorlage' (gemeint war die der Aufgabe).



  • dref schrieb:

    Zum Problem selber: Variablen sollten immer so lokal wie möglich sein, das zeigt sich in deinem bei j und file/file_2. Wenn du keine Funktionen verwenden möchtest, kannst du auch Scopes einfügen.

    for(j; j<3; j++) // so lokal wie möglich, also int j=0;.., schlecht: nackte Zahlen wie auch 5&7, etwas besser wäre es, Konstanten zu verwenden
        {
            for(int i=0; i<5; i++) // richtig, hier undurchsichtig, da dieses i Darüberleigendes überdeckt 
            {
     
            feld_2[j].zutat_id[i] = i;      //Vergeben einer ID für die jeweilige Zutat
            }
        }
     
    //  ifstream file_2("schoki.txt") <- besser direkt so
        ifstream file_2;                    //Einlesen der Datei "schoki.txt" mit 3 Einträgen
    
        file.open("schoki.txt"); // schlecht: sollte wohl file_2 sein
        if(file.is_open()){ //
     
            file_2 >> feld_2[j].name; // s.o., hier das resultierende Problem mit dem stream und auch j, j ist hier 3, der Code sollte wohl in einer Schleife stehen
            file_2 >> feld_2[j].gewicht;
            file_2 >> feld_2[j].menge_in_prozent[5];
        }
    

    Das ist nur, was mir direkt ins Auge gesprungen ist.

    Danke! Habe ich gleich mal ausgebessert!

    Das Problem ist halt, dass das mit dem fstream nur mal 10min angeschnitten wurde , an einem sehr simplen Beispiel und dieses "nametoindex" war mir gar nicht bekannt.



  • Atrom schrieb:

    und dieses "nametoindex" war mir gar nicht bekannt.

    Das gibt es ja auch nicht. Das solltest du selber machen.
    Hab nur die Signatur als Denkansatz geliefert - der Rest schreibt sich ja dann fast alleine.



  • Du hast die Zutaten doch bereits in ein Array eingelesen. Der Index dieses Array entspricht genau der gesuchten ID.

    Jetzt brauchst du beim Einlesen der Schokolade nur jeweils in einer Schleife das Zutatenarray von Anfang an durchzugehen bis der name der Zutat dem Namen in "feld.name" entspricht (blöder Name übrigens, besser wäre z.B. zutatenliste). Den entsprechenden Index nimmst du dann als Id für die Schokolade.



  • Also danke für eure Hilfe Leute, ich habe es jetzt hinbekommen! 🙂 👍



  • Hallo
    ich hab die selbe aufgabe :p
    und ich weiß auch nicht wie ich die Daten aus der schoki.txt auslese



  • Das Auslesen funktioniert genauso, wie bei der Datei "zutaten.txt". Steht doch schon da...


Anmelden zum Antworten