diff options
1 files changed, 95 insertions, 14 deletions
| -rw-r--r-- | Sem. 02/task3_temp.cpp | 109 |
diff --git a/Sem. 02/task3_temp.cpp b/Sem. 02/task3_temp.cpp index 910e8a1..6bee5ef 100644 --- a/Sem. 02/task3_temp.cpp +++ b/Sem. 02/task3_temp.cpp @@ -1,23 +1,27 @@ #include <iostream> #include <fstream> +#pragma warning(disable:4996) using namespace std; - const size_t capacity = 1024; -enum class Spec +enum class Speciality { computerScience, - softEng + softwareEngineering }; + struct StudentRecord { char firstName[capacity]; char lastName[capacity]; + char fnRaw[capacity]; - Spec spec; + //parsed by fnRaw + Speciality studentSpeciality; int fn; + // char email[capacity]; }; @@ -43,27 +47,104 @@ size_t getLinesCount(const char* fileName) count++; } - file.close (); + file.close(); return count; } -int main() +//Angel, + +void parseField(char* dest, const char*& source) { - - char inputFileName[] = "lists/si.csv"; - size_t studentsCount = getLinesCount(inputFileName) - 1; + while (*source != ',' && *source != '\0') + { + *dest = *source; + dest++; + source++; + } + source++; + *dest = '\0'; +} - StudentCollection myCollection; - myCollection.data = new StudentRecord[studentsCount]; +void parseFn(StudentRecord& currentStudent) +{ + if (strlen(currentStudent.fnRaw) < 5) + return; + if (currentStudent.fnRaw[4] == '6') + currentStudent.studentSpeciality = Speciality::softwareEngineering; + else if (currentStudent.fnRaw[4] == '8') + currentStudent.studentSpeciality = Speciality::computerScience; - //parse - //... + currentStudent.fn = atoi(currentStudent.fnRaw + 5); +} +void parseStudent(StudentRecord& currentStudent, const char* line) +{ + parseField(currentStudent.firstName, line); + parseField(currentStudent.lastName, line); + parseField(currentStudent.fnRaw, line); + parseField(currentStudent.email, line); + parseFn(currentStudent); +} + +void printStudent(const StudentRecord& st) +{ + std::cout << "First name: " << st.firstName << ", second name: " << st.lastName << ", speciality: "; + + if (st.studentSpeciality == Speciality::computerScience) + std::cout << "computer science, "; + else + std::cout << "software engineering, "; + + std::cout << "number: " << st.fn << ", email: " << st.email << std::endl; + +} + +size_t initStudentCollection(StudentCollection& collection, const char* fileName) +{ + size_t studentsCount = getLinesCount(fileName) - 1; - delete[] myCollection.data; + collection.data = new StudentRecord[studentsCount]; + + ifstream file(fileName); + if (!file.is_open()) + { + cout << "error"; + return 0; + } + + char buff[capacity]; + file.getline(buff, capacity); + for (int i = 0; i < studentsCount; i++) + { + file.getline(buff, capacity); + parseStudent(collection.data[i], buff); + } + + return studentsCount; +} + +void saveToFile(const char* fileName, const StudentCollection& collection, size_t studentsCount) +{ + ofstream file(fileName); + if (!file.is_open()) + return; + file << "Ime, Familiya, Fakulteten nomer, Imeyl adres" << std::endl; //header; + for (int i = 0; i < studentsCount; i++) + file << collection.data[i].firstName << "," << collection.data[i].lastName << "," << collection.data[i].fnRaw << "," << collection.data[i].email << std::endl; +} +int main() +{ + const char* fileName = "lists/all_students.csv"; + + StudentCollection collection; + size_t studentsCount = initStudentCollection(collection, fileName); + + //changes to students email + saveToFile(fileName, collection, studentsCount); + delete[] collection.data; } |
