sorted search

master
const an teen 2021-05-24 14:50:45 +03:00
parent c9a705c944
commit bf9eb67a06
1 changed files with 29 additions and 4 deletions

View File

@ -2,6 +2,8 @@
#include <fstream> #include <fstream>
#include <iomanip> #include <iomanip>
#include <regex> #include <regex>
#include <algorithm>
#include <vector>
#include <thread> #include <thread>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include "tcpsyncclient.h" #include "tcpsyncclient.h"
@ -22,10 +24,13 @@ std::map<std::string, std::string> conf =
std::string search(std::string text) std::string search(std::string text)
{ {
constexpr int maxSize = 10;
std::string values; std::string values;
std::vector<std::string> matches;
std::regex regex(".*" + text + ".*", std::regex_constants::extended | std::regex_constants::icase); std::regex regex(".*" + text + ".*", std::regex_constants::extended | std::regex_constants::icase);
boost::filesystem::recursive_directory_iterator dir(conf["logpath"]), end; boost::filesystem::recursive_directory_iterator dir(conf["logpath"]), end;
uint64_t success = 0;
for (; dir != end; ++dir) for (; dir != end; ++dir)
{ {
if (! boost::filesystem::is_directory(dir->path())) if (! boost::filesystem::is_directory(dir->path()))
@ -37,17 +42,37 @@ std::string search(std::string text)
{ {
if (std::regex_match(buffer, regex)) if (std::regex_match(buffer, regex))
{ {
++success;
std::string date = buffer.substr(0, buffer.find(' ')); std::string date = buffer.substr(0, buffer.find(' '));
if (values.find(date) == std::string::npos)
bool first = true;
for (auto entry: matches)
{ {
if (values != "") values += ", "; if (entry.find(date) != std::string::npos) first = false;
values += date; }
if (first) matches.push_back(date);
} }
} }
log.close();
} }
} }
if (matches.size() > 0)
{
std::reverse(matches.begin(), matches.end());
values += "(" + std::to_string(success) + ") ";
for (int i = matches.size()-1, count = 0; i >= 0 && count < maxSize ; --i, ++count)
{ // Компоновка выходной строки
if (values.find('-') != std::string::npos) values += ", ";
values += matches[i];
} }
if (values != "") values += "."; if (values != "") values += ".";
for (auto it = values.begin(), end = values.end(); it != end; ++it)
{ // Замена тире на слеш
if (*it == '-') *it = '/';
}
}
return values; return values;
} }