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

Глава 2

Убираем чердак, подвал, середину. Заменяем лексему.
///////////
3-й вариант

Эта программа в придачу к предыдущему заменяет еще и длинное наименование
пути: <img src="www.ПЕРВЫЕ ШАГИ.ru __ Шаг 213 - Стан и тд ... "

Заменяет на:<IMG SRC="images" и ставит тег <P> перед лексемой <IMG SRC="images"

Эта программа выбирает по одному маркеру.
Не будем усложнять. Работает - пусть работает.


//Работа с файлами и строками
//
#include <fstream>
#include <string>
#include <iostream>
using namespace std;

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


string str = "<h2>"; // лексема для поиска
string str2 = "<table"; // лексема для поиска
string str3 = "<div style"; // лексема для поиска
string str4 = "<center>"; // лексема для поиска
string str5 = "_files"; // лексема для поиска
string strInst = "<IMG SRC=\"images"; // лексема для поиска

string tmp;
string s1;
string s2;
//------------------
//введем два флага
bool f_01 = false;
bool f_02 = false;
bool f_03 = false;
bool f_04 = false;
bool f_05 = false;
bool f_06 = false;

//---------------------------------------
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');//считываем построчно в строку tmp
int n = 0;
int n1 = 0;

//-----------------------------------------------------------
//убираем чердак
while(1 != tmp.empty() && f_01==false ) {//если строка не пуста

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

// если лексемы в строке нет, то
// выйдем из цикла, чтобы прочесть следующую строку
if(n==-1) {

break;
}
// если лексема есть
if(n>0) {
s1.erase(0, n ); //левее n все отсекаем
tmp = s1;
f_01 = true;
}
}//end while

if(f_01==false) continue;

//-----------------------------------------------------------
// убираем середину 1
while(1 != tmp.empty() && f_02==false) {//если строка не пуста

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

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

to1<< tmp << endl;
break;
}
// если лексема есть
if(n>0) {
s1.erase(n, tmp.length() ); //правее n все отсекаем
tmp = s1;
to1<< tmp << endl; // копируем строку до лексемы
f_02 = true;
}

}//end while

if(f_02==false) continue;

//-----------------------------------------------------------
//убираем середину 2
while(1 != tmp.empty() && f_03==false ) {//если строка не пуста

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

// если лексемы в строке нет, то
// выйдем из цикла, чтобы прочесть следующую строку
if(n==-1) {

break;
}
// если лексема есть
if(n>0) {
s1.erase(0, n ); //левее n все отсекаем
tmp = s1;
f_03 = true;
}
}//end while

if(f_03==false) continue;

//-----------------------------------------------------------
//убираем IMG
int k =0;
while(1 != tmp.empty() && f_05==false && f_04==false) {//если строка не пуста

k++;
if(k==10) break;
s1 = tmp;
s2 = tmp;
n = tmp.find(str5); // найдем позицию вхождения "_files"
n1 = s2.find(str4); // найдем позицию вхождения "<center>"

if(n1>0){

f_05 = true;
f_04 = true;
}
// если лексемы в строке нет, то
// выйдем из цикла, чтобы прочесть следующую строку
if(n==-1 && f_04==false) {
to1<< tmp << endl;
break;
}
// если лексема есть
if(n>0) {
s1.erase(0, n+6 ); //левее n все отсекаем
tmp = "<P>" + strInst + s1;
}
}//end while

if(f_05==false) continue;

//-----------------------------------------------------------
// убираем подвал
while(1 != tmp.empty() && f_06==false) {//если строка не пуста

s1 = tmp;
n = tmp.find(str4); // найдем позицию вхождения "<center>"

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

to1<< tmp << endl;
break;
}
// если лексема есть
if(n>0) {
s1.erase(n, tmp.length() ); //правее n все отсекаем
to1<< s1 << endl; // копируем строку до лексемы
f_06 = true;
}
}//end while
} //end while главный цикл
to1.close();
from1.close();

return 0;

}


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

Hosted by uCoz