Глава 02 (продолжение 1)
Вверх
Задача: Вставить текст из другого файла в данное место (перед лексемой) этого файла.
Программа построчно считывает из текстового файла, затем в строке ищет подстроку (лексему). Найдя лексему, программа вставляет перед каждой найденной лексемой текст из иного файла.
Разыскиваемая лексема передана программным способом. Содержание текстовых файлов естественно может изменяться произвольно.
Программа 02_04
#include "copy01.h"
//using namespace std;
int main( int argc,char* argv[])
{
char fileTo[100] ="fileTo.txt";
ifstream from1("fileFrom.txt");//открываем файл для считывания
ofstream to2("fileTo.txt", ios::trunc);// стираем все, что было в файле
ofstream to1("fileTo.txt", ios::app);//открываем файл для записи
while (!from1.eof())
{
int n = 0;
while(1 != tmp.empty() )
{
n = tmp.find(str); // найдем позицию вхождения
// если лексемы в строке нет
// если лексема есть
to1<< s1 <<endl; // копируем строку до лексемы
copy01(fileFrom, fileTo); // вставка из файла
tmp.erase(0, str.length() ); // убираем лексему
// лексем больше нет, завершаем строку
// если лексема в начале строки
if( 1==tmp.empty())
{ return 0;
Поиск лексемы и вставка текста из другого файла
// Example_02_04
#include <fstream>
#include <string>
#include <iostream>
string tmp;
string s1;
char fileFrom[100] ="fileFrom1.txt";
if(!from1)
{
return (1);
to2.close();
if(!to1)
{
return (1);
if(n==-1)
{
break;
if(n>0)
{
tmp.erase(0, n ); //левее n все отсекаем
to1<< str ; // вставка лексемы
if( 1==tmp.empty())
{
to1 << endl;
continue;
if(n==0)
{
to1<< str ;
tmp.erase(0, str.length() );
to1 << endl;
to1.close();
from1.close();
Анализ:
Эта программа во многом похожа на программу Example_02_01, только вставляется перед лексемой не строка. а содержимое нового текстового файла. Естественно, программа улучшится если ее переделать так, чтобы основную работу в ней выполняла специальная функция. Как в вышеуказанной программе.