Назад | Начало урока | Вперед
Содержание

Глава 02 (продолжение 1)

Вверх

Поиск лексемы и вставка текста из другого файла

Задача: Вставить текст из другого файла в данное место (перед лексемой) этого файла. Программа построчно считывает из текстового файла, затем в строке ищет подстроку (лексему). Найдя лексему, программа вставляет перед каждой найденной лексемой текст из иного файла. Разыскиваемая лексема передана программным способом. Содержание текстовых файлов естественно может изменяться произвольно.

Программа 02_04


// Example_02_04
#include <fstream>
#include <string>
#include <iostream>

#include "copy01.h"

//using namespace std;

int main( int argc,char* argv[]) {

string str = "// Listing"; // лексема для поиска
string tmp;
string s1;

char fileTo[100] ="fileTo.txt";
char fileFrom[100] ="fileFrom1.txt";

ifstream from1("fileFrom.txt");//открываем файл для считывания
if(!from1) {

cout<<"Vhodnoi fail ne naiden:" ;
return (1);
}

ofstream to2("fileTo.txt", ios::trunc);// стираем все, что было в файле
to2.close();

ofstream to1("fileTo.txt", ios::app);//открываем файл для записи
if(!to1) {

cout<<"Vyhodnoi fail ne otkryt:" ;
return (1);
}

while (!from1.eof()) {

getline(from1,tmp,'\n');//считываем построчно в строку buf

int n = 0;

while(1 != tmp.empty() ) {

s1 = tmp;

n = tmp.find(str); // найдем позицию вхождения

// если лексемы в строке нет
if(n==-1) {

to1<< tmp <<endl;
break;
}

// если лексема есть
if(n>0) {

s1.erase(n, tmp.length() ); //правее n все отсекаем
tmp.erase(0, n ); //левее n все отсекаем

to1<< s1 <<endl; // копируем строку до лексемы

copy01(fileFrom, fileTo); // вставка из файла
to1<< str ; // вставка лексемы

tmp.erase(0, str.length() ); // убираем лексему

// лексем больше нет, завершаем строку
if( 1==tmp.empty()) {

to1 << "";
to1 << endl;
}
continue;
}

// если лексема в начале строки
if(n==0) {

copy01(fileFrom, fileTo);
to1<< str ;
tmp.erase(0, str.length() );

if( 1==tmp.empty()) {

to1 << "";
to1 << endl;
}
}
}//end while

} //end while

to1.close();
from1.close();

return 0;

}

Анализ: Эта программа во многом похожа на программу Example_02_01, только вставляется перед лексемой не строка. а содержимое нового текстового файла. Естественно, программа улучшится если ее переделать так, чтобы основную работу в ней выполняла специальная функция. Как в вышеуказанной программе.


Назад | Начало урока | Вперед
Содержание

Hosted by uCoz