Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <regex>
- #include <vector>
- #include <iterator>
- #include <string>
- #include <utility>
- #include <algorithm>
- #include <functional>
- #include <numeric>
- #include <fstream>
- using namespace std;
- const regex re{ R"(\$(.*)\*[abcdefABCDEF\d]{2})" };
- const regex delimiter{ "," };
- using Tokens = vector<string>;
- tuple<bool, Tokens> checkString(const string& str) {
- // Возвращает значение функции. Предположим, что строка не подходящая
- tuple<bool, vector<string>> result(false, {});
- // Мы хотим найти строку в заданном формате
- smatch sm{};
- if (regex_match(str, sm, re)) {
- // Хорошо, нашел. Проверка контрольной суммы
- if (string s = sm[1];stoul(str.substr(str.size() - 2), nullptr, 16) == accumulate(s.begin(), s.end(), 0U, bit_xor<unsigned char>())) {
- // Tokenize string
- Tokens tokens(sregex_token_iterator(str.begin(), str.end(), delimiter, -1), {});
- // Построить возвращаемое значение
- result = make_tuple(true, move(tokens));
- }
- }
- return result;
- }
- int main() {
- vector<Tokens> csvData{};
- // Откройте файл и проверьте, открыт ли он.
- if (ifstream logs("r:\\LogGLO.txt"); logs) {
- // Будем ли мы обрабатывать текстовые строки или нет
- bool processingActive{ false };
- // Читаем все строки файла
- for (string line{}; getline(logs, line);) {
- // Проверяем нужно ли продолжать
- if (line.substr(0, 9) == string("RE004%on%")) processingActive = true;
- if (line.substr(0, 10) == string("RE005%off%")) processingActive = false;
- // Проверяем и читает csv data
- if (processingActive) {
- const auto [ok, data] = checkString(line);
- if (ok) csvData.push_back(move(data));
- }
- }
- }
- // So, now we have read all csv data
- // Show eight column of GPGSV data
- for (const Tokens& t : csvData)
- if (t[0] == "$GPGSV")
- cout << t[7] << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement