Вы можете прочитать файл и использовать следующее регулярное выражение для содержимого. С помощью regex_search
вы можете искать ученика и перебирать группы.
Вы можете использовать это регулярное выражение, чтобы найти ученика и извлечь его данные:
\[student\w+\]\nid: *001\nname: *(\w*)\nsurname: *(\w*)\nphone number: *(\w*)\naddress: *(\w*)
Например, для
[student0]
id: 000
name:red
surname:brown
phone number:0123456
address: blabla
[student1]
id: 001
name:red
surname:brown
phone number:0123456
address: blabla
[student2]
id: 002
name:red
surname:brown
phone number:0123456
address: blabla
он будет соответствовать
[student1]
id: 001
name:red
surname:brown
phone number:0123456
address: blabla
, а группы содержат
red
, brown
, 0123456
и blabla
.
Хороший онлайн-инструмент для работы с регулярными выражениями: https://regexr.com/5891j
Вы можете присвоить идентификатор, который вы ищете, переменной id
и построить строку регулярного выражения. с:
R"(\[student\w+\]\nid: *)"s + id + R"(\nname: *(\w*)\nsurname: *(\w*)\nphone number: *(\w*)\naddress: *(\w*))"s;
Пример кода:
#include <fstream>
#include <iostream>
#include <regex>
#include <string>
using std::literals::string_literals::operator""s;
int main() {
std::string id = "001";
std::regex regex((R"(\[student\w+\]\nid: *)"s + id + R"(\nname: *(\w*)\nsurname: *(\w*)\nphone number: *(\w*)\naddress: *(\w*))"s).c_str());
std::ifstream file("data.txt");
if (!file) return EXIT_FAILURE;
std::string content{std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()};
std::smatch matches;
if (std::regex_search(content, matches, regex)) {
std::cout << "Student data:\n" << matches[0] << "\n\n";
std::cout << "Id: " << id << '\n';
std::cout << "Name: " << matches[1] << '\n';
std::cout << "Surname: " << matches[2] << '\n';
std::cout << "Phone: " << matches[3] << '\n';
std::cout << "Address: " << matches[4] << '\n';
}
}
Пример вывода:
Student data:
[student1]
id: 001
name:red
surname:brown
phone number:0123456
address: blabla
Id: 001
Name: red
Surname: brown
Phone: 0123456
Address: blabla