Парсинг определенного текста из файла

577
06 февраля 2017, 16:41

Нужно из файла (вот его текст) спарсить только что, что находится между тегом <keyMaterial> </keyMaterial>. Как можно это реализовать на С++?

//UPD. Проблему решил таким образом:

// ConsoleApplication11.cpp: определяет точку входа для консольного приложения.
//
#include <iostream>
#include <string>
#include <fstream>
#include <iterator>
int main()
{
    std::ifstream ifs("{1AC815AC-7555-48FB-B768-9E171453FE23}.xml");
    {
        std::string s;
        s.assign((std::istreambuf_iterator<char>(ifs.rdbuf())), std::istreambuf_iterator<char>());
        size_t begin = s.find("<keyMaterial>") + 13;
        size_t end = s.find("</keyMaterial>");
        s = s.substr(begin, end - begin);
        std::cout << s;
        ifs.close();
    }
    system("pause");
    return 0;
}
Answer 1

Как вариант:

#include <iostream>
#include <fstream>
#include <regex>
int main() {
  try {
    std::ifstream ifs("{1AC815AC-7555-48FB-B768-9E171453FE23}.xml");
    std::stringstream sstream;
    sstream << ifs.rdbuf();
    std::string str = sstream.str();
    std::regex rx("(?:.|\\n|\\r)*?<keyMaterial>(.+?)</keyMaterial>(?:.|\\n\\r)*");
    std::smatch match;
    if(!(std::regex_search(str, match, rx) && match.size()==2)) 
      throw std::runtime_error("Substring not found!");
    std::cout << match[1] << std::endl;
  } catch(std::runtime_error &e) {
    std::cout << "Error: " << e.what() << std::endl;
  } catch(...) {
    std::cout << "Some error!" << std::endl;
  }
  return 0;
}
READ ALSO
Problem with error C2440 in MS VS 2015

Problem with error C2440 in MS VS 2015

Первая часть кода:

570
Проблема подключения Lua к C++

Проблема подключения Lua к C++

Использую исходный код lua-53

486
Cimg, jpeglib и visual studio

Cimg, jpeglib и visual studio

Никак не могу разобраться как заставить работать Cimg с jpegПодключить всё подключил:

778