The task is to replace every occurring instance of a piece of text in a group of text files with another one. For this task we want to replace the text “Goodbye London!” with “Hello New York!” for a list of files.
#include <fstream> #include <iterator> #include <boost/regex.hpp> #include <string> #include <iostream> int main( int argc , char *argv[ ] ) { boost::regex to_be_replaced( "Goodbye London\\s*!" ) ; std::string replacement( "Hello New York!" ) ; for ( int i = 1 ; i < argc ; i++ ) { std::ifstream infile ( argv[ i ] ) ; if ( infile ) { std::string filetext( (std::istreambuf_iterator<char>( infile )) , std::istreambuf_iterator<char>( ) ) ; std::string changed ( boost::regex_replace( filetext , to_be_replaced , replacement )) ; infile.close( ) ; std::ofstream outfile( argv[ i ] , std::ios_base::out | std::ios_base::trunc ) ; if ( outfile.is_open( ) ) { outfile << changed ; outfile.close( ) ; } } else std::cout << "Can't find file " << argv[ i ] << " !\n" ; } return 0 ; }
Content is available under GNU Free Documentation License 1.2.