Zahlen aus Textdatei einlesen



  • Hallo!

    Ich habe ein paar Probleme die Zahlen aus einer Textdatei auszulesen bzw. diese dann weiter zu verwenden.
    Die Datei heißt beziehungen.txt, das Öffnen und auslesen klappt auch. Jedoch ist das Ziel bestimmte Zahlen zu suchen und dann die Zeile, in der die Zahl steht auszugeben.

    Die Textdatei hat folgendes Format (ein kleiner Ausschnitt):
    1 707 1
    2 65 1
    2 170 2
    2 230 1
    2 297 6
    2 349 2

    Das ist der Code, den ich bisher dazu habe:

    #include <iostream>
    using namespace std;
    #include <fstream>
    #include <stdlib.h>
    #include <string.h>
    
    struct beziehungen {
        struct beziehungen *naechster;
        int pate;
        int vater;
        int kind;
        };
    
    enum zustand {inPate, inVater};
    
    struct beziehungen *ladenamen(ifstream &eingabe);
    struct beziehungen *ladeidentifikation(ifstream &eingabe);
    struct beziehungen *sucheid(struct beziehungen *wurzel, char *bezeichung);
    
    int main() {
        char kommando [64];
    
        struct beziehungen *wurzel = NULL, *jetzt;
    
        ifstream eingabe;
    
        eingabe.open("beziehungen.txt");
    
        if (!eingabe) {
    
            cout << "Datei existiert nicht!" << endl;
            return 0;
        }
    
        wurzel = ladenamen(eingabe);
    
        for (;;) {
            cout << "An welcher Person sind Sie interessiert? Bitte Ordnungsnummer eingeben:" << endl;
            cout << "(Mit '*' beenden Sie das Programm.)" << endl;
            cin.getline(kommando, 64, '\n');
            jetzt = sucheid (wurzel, kommando);
                if (jetzt != NULL)
                {
                    cout << "Diese ID hat den Namen: " << jetzt->vater << " mit der Nummer: " << jetzt->kind << endl;
                }
                else if (*kommando=='*') {
                    return 0;
                }
    
                else {
                    cout << "Diese ID existiert nicht." << endl;
    
                }
    
            }
    
    }
    
    struct beziehungen *ladenamen(ifstream &eingabe)
    {
        struct beziehungen *wurzel = NULL, *jetzt=NULL, *neu;
    
        while (!eingabe.eof())
        {
            neu = ladeidentifikation(eingabe);
            if (neu != NULL)
            {
                if (wurzel == NULL) wurzel = neu;
                else jetzt->naechster = neu;
                jetzt = neu;
    
            }
        }
    
            return wurzel;
    }
    
        struct beziehungen *ladeidentifikation(ifstream &eingabe)
        {
    
            struct beziehungen *beziehung;
            char zeichen;
            char puffer[100];
            int zaehler;
            enum zustand zustand;
    
            beziehung = new struct beziehungen;
            beziehung->naechster = NULL;
    
            zaehler = 0;
    
            for (;;)
                {
                eingabe.get(zeichen);
                if (eingabe.eof()) return NULL;
                switch(zeichen)
                   {
                case ' ':
                      puffer[zaehler]='\0';
                      zaehler=0;
                      beziehung->pate=atoi(puffer);
                      if (beziehung->pate==0)
                      {
                          zustand=inPate;
                          break;
                      }
                      else if (zustand!=inVater)
                      {
                          beziehung->pate=atoi(puffer);
                          zustand=inVater;
                          break;
                      }
    
                      else if (zustand=inVater)
                      {
                          beziehung->vater=atoi(puffer);
                          break;
                      }
                case '\n':
                   puffer[zaehler]='\0';
                   zaehler=0;
                   beziehung->kind=atoi(puffer);
                   break;
                default:
                   puffer[zaehler]=zeichen;
                   zaehler++;
                   break;
                }
    
            }
        }
    
        struct beziehungen *sucheid(struct beziehungen *wurzel, char *bezeichnung)
        {
            while (wurzel != NULL)
            {
                if (!strcmp(wurzel->pate, bezeichnung)) return wurzel;
                wurzel = wurzel->naechster;
            }
    
            return NULL;
        }
    

    Mein einziger Fehler ist, dass man strcmp nicht mit int benutzen kann. Ich weiß jedoch nicht, was ich sonst noch verwenden könnte.

    Wäre super, wenn mir jemand hefen könnte. 🙂



  • Falsches Unterforum - hier ist C++/CLI, eine .NET Sprache.
    Dein Code *ist* C++...



  • Wenn dir das weiterhilft, fand ich damals hilfreich:
    http://www.willemer.de/informatik/cpp/fileop.htm


Log in to reply