public void readStudyPrograms(String fileName, DataController dataController) {

        boolean firstRecord = true;
        ArrayList<String> studyProgramDataRecords = super.readFile(fileName);
        try {
            StudyProgram studyProgram = new StudyProgram();
            String record;
            for (int i = 0; i < studyProgramDataRecords.size(); i++) {
                record = studyProgramDataRecords.get(i);

                String[] columns = record.split(";");

                if (firstRecord) {
                    InputValidator.validateEmpty("Studiengangsname", columns[0], record, i);
                    InputValidator.validateStardEndsWithBraces("Studiengangsname", columns[0], record, i);

                    firstRecord = false;
                    studyProgram.setName(removeQuotationMarks(columns[0]));
                } else {
                    
                    if (columns.length < 2) {
                        InputValidator.validateInteger("Dem Fachsemester sind keine Kurse zugeordnet", columns[0], record, i);
                    }
                    InputValidator.validateInteger("Fachsemester", columns[0], record, i);

                    Semester semester = new Semester();
                    semester.setStudyProgram(studyProgram);
                    semester.setName("Semester " + columns[0]);
                    String courseName;
                    for (int y = 1; y < columns.length; y++) {
                        courseName = removeQuotationMarks(columns[y]).trim();
                        boolean added = false;
                        for (Course course : dataController.getCourses()) {
                            if (course.getName().equals(courseName)) {
                                semester.getCourses().add(course);
                                added = true;
                            }
                        }
                        if (!added) {
                            throw new InputFileReaderException("Der Studiengang " + studyProgram.getName()
                                    + " bezieht sich in " + semester.getName() + " auf den unbekannten Kurs " + courseName, null, record, i);
                        }
                    }

                    studyProgram.getSemesters().add(semester);

                }

            }

            if (dataController.getStudyProgramByName(studyProgram.getName()) != null) {
                  Protocol.log("Fehler in Studiengangsdatei: " + fileName + ": Der Studiengang mit der Bezeichnung '" + studyProgram.getName() + "' wurde bereits eingelesen. Datei ignoriert.");
            } else {
                dataController.getStudyPrograms().add(studyProgram);
            }

        } catch (InputFileReaderException ex) {
            Protocol.log("Fehler in Studiengangsdatei: " + fileName + " auf Zeile " + ex.getRow() + ": " + ex.getMessage() + ": Datei wird ignoriert");
        }
    }