Datei mit Kopfzeile einlesen



  • Ich habe eine kurze Frage und komme nicht wirklich weiter. Ich habe eine txt-Datei. Diese Datei möchte ich einlesen und die Daten weiter verarbeiten. Das einlesen und verarbeiten ist im Prinzip ja einfach.
    In meinem Fall ist aber die Struktur der ersten Zeile anders als die Struktur der folgenden Zeilen - die Bedeutung der Werte ist dabei zwischen erster und den folgenden Zeilen unterschiedlich.

    Bsp:
    Die erste Zeile enthält die Beschreibung eines Autos (PS/KM/Türen/Farbe) und sieht wie folgt aus:

    Zeile 1: 144 33000 5 Rot

    Die folgenden Zeilen beschreiben die Fahrer, welche mit dem Auto gefahren sind

    Zeile 2: Meier Hans 25 3000 6.5
    Zeiel 3: Mueller Thomas 28 1200 6,8
    Zeile x: Mustermann Max 35 1000 6.0

    Ich habe bisher immer getline verwendet um Zeilen aus einer Datei einzulesen - jetzt besteht aber das Problem, dass ich für den zweiten Teil (Fahrer) mit dem einlesen der Zeilen, erst in der zweiten Zeile beginnen will. Mein Beispielcode (ich hoffe so kurz wie möglich und lang wie nötig damit Ihr versteht was ich gemacht habe):

    ifstream datei ("C:\\.....\\Daten_1A.txt");
        string zeile;
    
        getline(datei, zeile); // Einlesen der ersten Zeile
        int aa; // PS
        int bb; // km
        int cc; // Tueren
        string dd; // Farbe
        stringstream zeilenpuffer(zeile);
        zeilenpuffer >> aa >> bb >> cc >> dd; // Einlesen
        // hier erfolgt dann die Verarbeitung der Daten der ersten  -> z.B. Bildung eines Objekts einer Klasse
    
        while(getline(datei, zeile)) // Hier soll erst ab der zweiten Zeile gelesen werden !!!!!!!!!
        {
            string a; // PS
            string b; // km
            int c; // Alter
            int d; // gefahrene Kilometer
            double e; // durchschnittler Verbrauch
    
            stringstream zeilenpuffer(zeile);
    
            zeilenpuffer >> a >> b >> c >> d; // Einlesen
            // hier erfolgt dann die Verarbeitung der Daten der folgenden Zeile innerhalb der Schleife
        }
    

    Wie Ihr seht, ist mein Ansatz eine Mischung aus getline und getline in einer Schleife - ich habe jedoch keine Möglichleit gefunden mit dem Auslösen des Einlesen innerhalb der Schleife erst in der zweiten Schleife zu beginnen (kann ich getline() überschreiben? Kann mit jemand helfen? Ich weiß das die Lösung wahrscheinlich einfach ist, aber ich konnte nichts passendes in den vielen Themen zu meiner Frage finden. Ich denke vielleicht habe ich mich auch mit meinem Ansatz verrant.
    Auch andere Lösungsansatze interessieren mich, jedoch kann ich die einzulesende Datei nicht verändern.



  • Die Schleife fängt doch mit der zweiten Zeile an. Wo ist das Problem?



  • //Zeile überspringen, wenn nicht geht, zurückgehen.
    if(!getline(datei, zeile))
        return;
    
    //Und dann einfach weitermachen.
    while(getline(datei, zeile))
    {...}
    

    Oder verpasse ich grad was?


Anmelden zum Antworten