diff options
| author | Syndamia <kamen@syndamia.com> | 2024-05-08 09:35:42 +0300 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-05-08 09:35:42 +0300 |
| commit | e6f1ba664667047c74436f4f35536293f02d846f (patch) | |
| tree | 6fc76bcdd2bc03aa740bab26645b072cacfd7c28 /week09/Exercise3/main.cpp | |
| parent | cbd6d3aa606b18dde3f203e6edfab04935bbbd59 (diff) | |
| download | oop-2023-solutions-e6f1ba664667047c74436f4f35536293f02d846f.tar oop-2023-solutions-e6f1ba664667047c74436f4f35536293f02d846f.tar.gz oop-2023-solutions-e6f1ba664667047c74436f4f35536293f02d846f.zip | |
[w9] Fixed and finished ex3
Diffstat (limited to 'week09/Exercise3/main.cpp')
| -rw-r--r-- | week09/Exercise3/main.cpp | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/week09/Exercise3/main.cpp b/week09/Exercise3/main.cpp index d9ebd6f..6268406 100644 --- a/week09/Exercise3/main.cpp +++ b/week09/Exercise3/main.cpp @@ -1,8 +1,75 @@ +#include <iostream> +#include <fstream> +#include <cstring> #include "Train.h" +#include "TrainNetwork.h" + +void railidToFilename(unsigned railID, char outputFileName[9]) { + // възползваме се от факта, че най-често int се съставя от четири байта + strncpy(outputFileName, (char*)&railID, sizeof(char)); + strcat(outputFileName, ".txt"); +} + +void splitRails(const char* fileName) { + std::ifstream inFile(fileName, std::ios::binary); + if (!inFile.is_open()) { + throw "Couldn't open file!"; + } + + while (!inFile.eof()) { + unsigned railID; + inFile.read((char*)&railID, sizeof(railID)); + int regionsCount; + inFile.read((char*)®ionsCount, sizeof(regionsCount)); + + char outputFileName[9]; + railidToFilename(railID, outputFileName); + + std::ofstream outFile(outputFileName); + if (!outFile.is_open()) { + throw "Couldn't open file!"; + } + + while (regionsCount > 0) { + char buffer; + inFile.read(&buffer, sizeof(buffer)); + outFile.write(&buffer, sizeof(buffer)); + if (buffer == '\n') { + regionsCount--; + } + } + + outFile.close(); + } + + inFile.close(); +} int main() { - Train t("abc", 1, "train.txt"); - t.TransferNextRegion(); - t.TransferNextRegion(); - t.TransferNextRegion(); + char fileName[1024]; + std::cin.getline(fileName, 1024); + + splitRails(fileName); + + int N; + std::cin >> N; + Train trains[512]; + + char modelBuffer[128]; + unsigned railID; + char filenameBuffer[9]; + for (int i = 0; i < N && i < 512; i++) { + std::cin.ignore(); + std::cin.getline(modelBuffer, 128); + std::cin >> railID; + railidToFilename(railID, filenameBuffer); + trains[i] = Train(modelBuffer, railID, filenameBuffer); + } + + char tnIdBuffer[8]; + std::cin.ignore(); + std::cin.getline(tnIdBuffer, 8); + + TrainNetwork tn(tnIdBuffer, trains); + std::cout << tn.RunTrains() << std::endl; } |
