Глава 2
Эта программа в придачу к предыдущему заменяет еще и длинное наименование
пути: <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;
}
Назад |
Начало урока |
Вверх |
Вперед
Содержание