Brauche Entscheidungshilfe für das Einlesen einer Datei



  • pippo schrieb:

    Sorry, aber mit dem Code bin ich hoffnungslos überfordert.

    Schade, - hast Du denn mal versucht ihn zum Laufen zu bringen?

    pippo schrieb:

    Mitlerweile hab ich in nem anderen Forum erfahren, wie ich ein 3D-Array mit vector erstelle, nur dummerweise ist es scheinbar nicht möglich, in den ersten beiden Dimensionen Zeichen mit Char und in der 3. Zahlen mit float zu speichern.

    Stell Dir doch mal ein Schachbrett vor. Jemand gibt Dir die Aufgabe in der ersten Dimension also von links nach rechts Münzen hinzulegen und in der zweiten Dimension also von vorn nach hinten Heftklammern. Was liegt dann auf jedem Feld des Schachbretts? Und kann man danach noch erkennen, dass Du die Münzen von links nach rechts hingelegt hast und nicht von vorne nach hinten?

    pippo schrieb:

    Weiß nicht, wie ichs noch erklären soll, damit man es versteht 🙂

    Ich glaub' das haben hier alle verstanden 😉

    pippo schrieb:

    So sieht die Textdatei aus:

    Hersteller1 Modell1 3 5 23,3 54,5 345,32
    Hersteller1 Modell2 3 5 34,4 216,4 3453,1
    Hersteller2 Modell1 1 4 7 9 0 4
    .
    .
    .
    Hersteller20 Modell9 3 5 7 8 4 3 64,4

    Ist das richtig, dass die Fließkommazahlen mit ',' geschrieben sind und es unterschiedliche Anzahlen von Zahlen hinter Hersteller und Modell geben kann?

    pippo schrieb:

    Nun will ich das ganze in einem Array speichern. Das kann doch nicht so schwer sein

    Ist es auch nicht, siehe mein Code und die anderen Vorschläge.

    pippo schrieb:

    z.B. ein Array wie Kennwerte[1][2][3]

    von welchem Typ soll 'Kennwerte[1][2][3]' denn sein?

    Gruß
    Werner



  • Umgesetzt hab ichs noch nicht, da ich nicht den leisesten Schimmer habe, wie ich den Code in mein Programm einbringe.

    Wie meinst du das mit dem Schachbrett? Es ist ja nicht so, dass ich den Wert von der 1. Dimension und den der 2. addieren will und später wieder wissen, welcher als 1. dastand. Oder meinst, dass z.B. Array[1][3] das gleiche wär wie Array[3][1]? Dem ist ja nicht so, oder?

    Dass mit dem "," war ein versehen, dass es eine unterschiedliche Anzahl von Werten geben kann ist möglich, ja. Aber das sollte ja nix machen.

    Das mit dem Typ des Arrays ist eben mein Problem, ich wollte eben, dass die einzelnen Dimensionen unterschiedliche Typen sein können, aber das geht ja nicht.



  • Mit Vektoren geht das tatsächlich nicht, aber du könntest im äußersten Notfall eine map verwenden (wobei ich nicht sicher bin, wie exakt die mit floats's umgehen kann). Ansonsten solltest du einfach mal Werner's Code ausprobieren und sehen, was dabei herauskommt.



  • pippo schrieb:

    Umgesetzt hab ichs noch nicht, da ich nicht den leisesten Schimmer habe, wie ich den Code in mein Programm einbringe.

    copy & paste würde ich vorschlagen 🙄 . kannst Du ein Hello World-Programm schreiben, generieren und ausführen lassen? Dann nehme das her und ersetze einfach den Code.

    pippo schrieb:

    Wie meinst du das mit dem Schachbrett? Es ist ja nicht so, dass ich den Wert von der 1. Dimension und den der 2. addieren will und später wieder wissen, welcher als 1. dastand. Oder meinst, dass z.B. Array[1][3] das gleiche wär wie Array[3][1]? Dem ist ja nicht so, oder?

    also mal angenommen - nur angenommen - in Array[1][3] steht ein Hersteller und in Array[3][1] ein Model, was steht dann in Array[1][1] und Array[3][3]?

    pippo schrieb:

    Dass mit dem "," war ein versehen, dass es eine unterschiedliche Anzahl von Werten geben kann ist möglich, ja. Aber das sollte ja nix machen.

    Das mit dem Typ des Arrays ist eben mein Problem, ich wollte eben, dass die einzelnen Dimensionen unterschiedliche Typen sein können, aber das geht ja nicht.

    Deine Gedankengänge sind interessant. Vielleicht möchtest Du eine map von maps mit einem Vektor von Float-Vektoren.

    using namespace std;
        map< string, map< string, vector< vector< float > > > > cat;
        ifstream file("input.txt");
        for( Artikel a; file >> a; )
        {
            cat[ a.Hersteller() ][ a.Model() ].push_back( a.Werte() );
        }
    

    Isses das?

    Gruß
    Werner



  • Ich glaub ein map-container könnte das Problem ziemlich gut treffen. Konnte jetz aber leider nirgends eine Anleitung oder ähnliches finden, wie sich sowas aufbaut und wie man sowas programmiert



  • Hallo

    im Grunde auch nicht anders als mit anderen STL-Containern..
    Eine Liste der Methoden findets du zum Beispiel hier.

    bis bald
    akari



  • Werner Salomon schrieb:

    using namespace std;
        map< string, map< string, vector< vector< float > > > > cat;
        ifstream file("input.txt");
        for( Artikel a; file >> a; )
        {
            cat[ a.Hersteller() ][ a.Model() ].push_back( a.Werte() );
        }
    

    Hab mich mal etwas schlaugelesen, aber immer noch ein paar Fragen:
    1. Wie kann ich da eigentlich mehrere Werte einlesen? Muss ich da irgendwo einen Index mitlaufen lassen?.
    2. Was ist Artikel? Muss ich das vorher nicht irgendwie definieren?
    3. Wie kann ich so ne Map an eine Funktion übergeben, bzw. zurückgeben? Als Referenz?
    4. Wenn ich das so programmiere, dann kann ich schon nach Hersteller und Modell einzeln suchen lassen, oder?



  • Artikel ist die zuvor definierte Klasse. Am besten kaufst du dir ein Buch zur Thematik.



  • Vorschläge?
    Zur Zeit benutze ich "C++ in 21 Tagen" und bin bisher eigentlich super zufrieden damit. Leider kann man halt auch in einem solch großen Buch nicht auf jede Einzelheit eingehen



  • ...großen Buch...

    C++ in 21 Tagen kann man als Taschenbuch durchgehen lassen.
    Zum lernen absolut ungeeignet.



  • pippo schrieb:

    Werner Salomon schrieb:

    using namespace std;
        map< string, map< string, vector< vector< float > > > > cat;
        ifstream file("input.txt");
        for( Artikel a; file >> a; )
        {
            cat[ a.Hersteller() ][ a.Model() ].push_back( a.Werte() );
        }
    

    Hab mich mal etwas schlaugelesen, aber immer noch ein paar Fragen:
    1. Wie kann ich da eigentlich mehrere Werte einlesen? Muss ich da irgendwo einen Index mitlaufen lassen?.

    Hallo Pippo,
    Die Schleife liest alle Werte aus, die in der Datei stehen.

    pippo schrieb:

    2. Was ist Artikel? Muss ich das vorher nicht irgendwie definieren?

    siehe mein früheres Posting in diesem Thread

    pippo schrieb:

    3. Wie kann ich so ne Map an eine Funktion übergeben, bzw. zurückgeben? Als Referenz?

    Als Referenz oder per Value zurück, genau so wie ein 'int'.

    pippo schrieb:

    4. Wenn ich das so programmiere, dann kann ich schon nach Hersteller und Modell einzeln suchen lassen, oder?

    Du brauchst nicht mehr suchen - das ist eine map - Du greifst drauf zu.

    map< string, vector< vector< float > > > alleModelleEinesHerstellers = cat["EinHersteller"];
        vector< vector< float > > alleWerteDerArtikelEinesModells = alleModelleEinesHerstellers["ModellName"];
    

    Schau in Dein Tutorial zum Thema std::map.

    pippo schrieb:

    Zur Zeit benutze ich "C++ in 21 Tagen" und bin bisher eigentlich super zufrieden damit. Leider kann man halt auch in einem solch großen Buch nicht auf jede Einzelheit eingehen

    siehe dazu hier. Ansonsten ist oben rechts auf dieser Seite ein Link - da steht 'Bücher' drauf, und er führt hier hin.

    Außerdem bist Du mir noch eine Antwort schuldig

    Werner Salomon schrieb:

    pippo schrieb:

    Wie meinst du das mit dem Schachbrett? Es ist ja nicht so, dass ich den Wert von der 1. Dimension und den der 2. addieren will und später wieder wissen, welcher als 1. dastand. Oder meinst, dass z.B. Array[1][3] das gleiche wär wie Array[3][1]? Dem ist ja nicht so, oder?

    also mal angenommen - nur angenommen - in Array[1][3] steht ein Hersteller und in Array[3][1] ein Model, was steht dann in Array[1][1] und Array[3][3]?

    Gruß
    Werner



  • Taschenbuch? Das Buch hat 1000 und ich finds absolut genial. Hatte ohne Mühe ne 1 in der Informatikprüfung aus dem 1. Semester. Hab mind. schon 15 C++ Bücher gesehen und keins war nur annähernd so ausführlich und der Stoff so gut erklärt


Anmelden zum Antworten