Wie lese ich am besten aus dieser Datei ein ?!?!



  • Hallo,

    meine Eingabedatei sieht wie folgt aus :

    Otto1957 Willi1924 Erna1934
    Sven1933 unbekannt Kunigunde1907

    1.Stelle : Name des Kindes und Geburtsatum
    2.Stelle : Name des Vaters und Geburtsdatum
    3.Stelle : Name der Mutter und Geburtsdatum
    unbekannt : halt unbekannt

    meine Abfrage wäre wie folgt :

    KVM::KVM(istringstream &istrstr_Zeile)
    {
        char c;
        string name="";
        short zahl;
        short i = 0;
    
        while(istrstr_Zeile.eof()==false)
        {
            istrstr_Zeile >> c;
            while(isalpha(c))
            {
                name+=c;
                istrstr_Zeile >> c;
            }
            istrstr_Zeile.putback(c);
            istrstr_Zeile >> zahl;
            switch(i)
            {
            case 0 : 
                {
                    Kind.SetName(name);
                    name="";
                    Kind.SetGebDat(zahl);
                }
                break;
            case 1:
                {
                    Vater.SetName(name);
                    name="";
                    Vater.SetGebDat(zahl);
                }
                break;
            case 2:
                {
                    Mutter.SetName(name);
                    name="";
                    Mutter.SetGebDat(zahl);
                }
                break;
            }
            i++;
        }
    }
    

    doch mit dem "unbekannt" habe ich ein Problem, was wäre denn eine Programmiertechnisch intelligente Lösung ?



  • folgender tipp: lese eine zeile (bis \n) als string ein, dann parsen; z.b. einzelne Strings aufteilen nach Leerzeichen (oder anderes Trennzeichen wenn du hast), danach hast du 4 Teilstrings; die letzten 4 zeichen eines jeden Teilstrings repräsentieren die jahrzahl,
    dann kannst du auch leicht auf "unbekannt" prüfen oder feststellen, ob du einen ungültigen Datensatz hast o.ä.



  • und mit welcher Methode kann ich das machen ?



  • http://www.msoe.edu/eecs/ce/courseinfo/stl/string.htm

    Zeile vom Input-Stream lesen: .getline()
    zerlegen: z.b. mit find() die leerzeichen rausfiltern -> Startindizes -> Umkopieren in Einzelstrings (z.b: mit substr())
    Jahrzahlen rausfiltern: über Indizes (4 Stellig), nach int casten (Exceptions abfangen nicht vergessen), mit z.b. erase die jahrzahlen wegschneiden usw...


Anmelden zum Antworten