Advertisement
sigmachto

Untitled

Nov 21st, 2024
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. #include <string>
  4. #include <fstream>
  5. #include <vector>
  6. #include <regex>
  7. #include <algorithm>
  8. #include <map>
  9.  
  10. using namespace std;
  11.  
  12. struct FileInfo {
  13.     string name;
  14.     string date;
  15.     int size;
  16. };
  17.  
  18. std::ostream& operator<<(std::ostream& stream, const FileInfo& fileInfo);
  19. static vector<string> extractData(const string& data, const string& regex);
  20. static string getFileName(string s);
  21. static string getFileDate(string s);
  22. static int getFileSize(string s);
  23.  
  24. int main() {
  25.     setlocale(LC_ALL, "ru");
  26.     ifstream ist("file.txt");
  27.     if (!ist) {
  28.         cerr << "Error opening file." << endl;
  29.         return 1;
  30.     }
  31.  
  32.     vector<FileInfo> files;
  33.     string s;
  34.  
  35.     while (getline(ist, s)) {
  36.         files.push_back({ getFileName(s), getFileDate(s), getFileSize(s) });
  37.     }
  38.  
  39.  
  40.     sort(files.begin(), files.end(), [](const FileInfo& a, const FileInfo& b) {
  41.         return (a.date == b.date) ? (a.size < b.size) : (a.date < b.date);
  42.         });
  43.  
  44.     for (const auto& item : files) {
  45.         cout << item << "\n";
  46.     }
  47.  
  48.     // Подсчёт общего размера файлов для каждой уникальной даты
  49.     map<string, int> totalSizeByDate;
  50.     for (const auto& item : files) {
  51.         totalSizeByDate[item.date] += item.size;
  52.     }
  53.  
  54.     cout << "\nОбщий размер файлов по каждой дате:\n";
  55.     for (const auto& item : totalSizeByDate) {
  56.         cout << "Дата: " << item.first << ", Общий размер: " << item.second << " байт\n";
  57.     }
  58.  
  59.     return 0;
  60. }
  61.  
  62.  
  63. string getFileName(string s) {
  64.     auto name = extractData(s, R"("[a-zA-Z0-9._-]+")");
  65.     if (name.empty()) {
  66.         throw runtime_error("File name not found in the input line.");
  67.     }
  68.     return name.at(0);
  69. }
  70.  
  71. string getFileDate(string s) {
  72.     auto date = extractData(s, R"(\d{2}.\d{2}.\d{4})");  
  73.     if (date.size() != 1) {
  74.         throw runtime_error("File date not found or invalid in the input line.");
  75.     }
  76.     int x = 0;
  77.     return date.at(0);
  78. }
  79.  
  80. int getFileSize(string s) {
  81.     auto size = extractData(s, R"(\b\d+\b)");
  82.     if (size.size() < 1) {
  83.         throw runtime_error("File size not found in the input line.");
  84.     }
  85.    
  86.     int xxxxx =9213;
  87.     int xzs = 0;
  88.     int x = 0;
  89.     return stoi(size.back());
  90. }
  91.  
  92. vector<string> extractData(const string& data, const string& regex) {
  93.     std::regex words_regex(regex);
  94.     auto words_begin = sregex_iterator(data.begin(), data.end(), words_regex);
  95.     auto words_end = sregex_iterator();
  96.  
  97.     vector<string> out;
  98.     for (sregex_iterator i = words_begin; i != words_end; ++i) {
  99.         out.push_back(i->str());
  100.     }
  101.     return out;
  102. }
  103.  
  104. ostream& operator<<(std::ostream& stream, const FileInfo& fileInfo) {
  105.     stream << "File Name: " << fileInfo.name;
  106.     stream << ", Date: " << fileInfo.date;
  107.     stream << ", Size: " << fileInfo.size << " bytes";
  108.     return stream;
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement