Implement a Line Filter by Using Ranges in C++
Let’s talk about filtering lines in C++. We can filter lines in the file by some characters present in it. Here, we use library Ranges for filtering the lines if certain words are present.
For filtering, we need:
- split- This part of the program splits the text into lines
- filter- This filters the lines having that word
- join- This joins the filtered lines to make a new text
The code for a file having lines filtered by certain words present in them :
#include <range/v3/view/filter.hpp> #include <range/v3/view/join.hpp> #include <range/v3/view/split.hpp> std::string const filteredText = text | ranges::view::split('\n') | ranges::view::filter(contains(controlFlowKeywords())) | ranges::view::join('\n'); bool contains(std::string const& string, std::vector<std::string> const& substrings) //split { return std::any_of(begin(substrings), end(substrings), [string](std::string const& substring) { return string.find(substring) != std::string::npos; }); } auto contains(std::vector<std::string> const& substrings) //filter { return [&substrings](std::string const& string) { return contains(string, substrings); }; } auto contains(std::vector<std::string> && substrings) //join { return [substrings{std::move(substrings)}](std::string const& string) { return contains(string, substrings); }; }
Leave a Reply