Kommagetrennte Textdatei in Array einlesen

Ich versuche, ein Programm in C ++ zu schreiben, das ein College-Anmeldesystem emuliert, bei dem der Schüler seinen Ausweis eingibt, und das Programm eine Textdatei nach Informationen durchsucht und eine Struktur auf der Grundlage der Textdatei lädt. Ich habe einen Punkt erreicht, an dem ich Probleme habe, ihre eingeschriebenen Kurse in das Array der Struktur zu bekommen. Wenn Sie die Funktion getline verwenden und das ',' als Trennzeichen verwenden, wird die nächste Zeile bis zum nächsten Komma übertragen. Was wäre der richtige Algorithmus dafür?

Dies ist das Datei-Setup, das @ enthälFälschun Schüler Informationen

918273645, Steve, Albright, ITCS2530, MATH210, ENG140 123456789, Kim, Murphy, ITCS2530, MATH101 213456789, Dean, Bowers, ITCS2530, ENG140 219834765, Jerry, Clark, MGMT201, MATH210

(Aufzählungszeichen für das Layout hinzugefügt; nicht in der Datei)

Der Benutzer gibt beispielsweise "123456789" als ID ein, und die Informationen von Kim Murphy werden gelesen. Bei der ersten Iteration von getline wird "ITCS2530" gelesen und in die Variable eingefügt und dann in die Struktur geladen. kein problem da. Der letzte Kurs in der Liste hat jedoch das Zeilenvorschubzeichen vor dem nächsten Komma, sodass die nächste Iteration "MATH101 / nl213456789" lautet, die gesamte Zeichenfolge in die Variable einfügt und versucht, diese in die Struktur zu laden.

Die erste Spalte enthält ihre ID, dann ihren Vor- und Nachnamen und anschließend ihre aktuell eingeschriebenen Kurse. Beachten Sie, dass die Anzahl der eingeschriebenen Kurse variieren kann.

Hier ist der Code, an dem ich gerade arbeite:

    student login()
{
    string ID;
    student newStudent;
    string enrolled;
    int i = 0;
    while (true)
    {
        cout << "Enter Student ID: ";
        cin >> newStudent.ID;
        cout << endl;
        if (newStudent.ID.length() == 9)
            break;
        else
            cout << "That ID is invalid - IDs are 9 digits" << endl;
    }
    ifstream inFile;
    ofstream outFile;
    inFile.open("registration.txt");
    if (inFile.is_open())                                                               
    //Check if file is open
    {
        while (!inFile.eof())                                                           
        //While not at end of file
        {
            getline(inFile, ID, ',');                                                   
            //Search for ID
            if (ID == newStudent.ID)
            {
                getline(inFile, newStudent.fName, ',');                                         
                //Assign fName and lName
                getline(inFile, newStudent.lName, ','); 

                while (enrolled != "\n")
                {
                    getline(inFile, enrolled, ',');
                    if (enrolled == "\n")
                    {
                        cout << "Not currently enrolled in a class." << endl;
                    }
                    else
                    {
                        newStudent.courses[i] = enrolled;
                        i++;
                    }
                }
                    cout << newStudent.lName << ", Welcome to the MCC Enrollment System!" << endl;
                for (i = 0; i <= NUM_OF_COURSES; i++)
                {
                    cout << "Enrolled courses: " << newStudent.courses[i] << endl;
                }

                    cout << endl;
                    break;
                    //Stops searching
            }
            else                                                                        
                //Ignores rest of line - used to skip to the next line
            {
                getline(inFile, ID, '\n');
            }
            if (inFile.eof())                                                           
                //If ID was not found
            {
                inFile.close();
                cout << "Enter First Name: ";                                           
                //Begin entry of new student
                cin >> newStudent.fName;
                cout << endl;
                cout << "Enter Last Name: ";
                cin >> newStudent.lName;

                cout << endl;
                outFile.open("registration.txt", ios::app);
                if (outFile.is_open())
                {
                    outFile << newStudent.ID << "," << newStudent.fName << "," << newStudent.lName << "\n";
                }
            }
        }
    }
    return newStudent;
}

ielen Dank im Voraus für jede Hilf

Antworten auf die Frage(4)

Ihre Antwort auf die Frage