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

Глава 2

Убираем чердак и подвал
Это программа на предмет работы с html-текстом.

///////////
1-й вариант

Эта программа считывает построчно из файла в новый файл, но
еще делает следующее:
1. Убирает все строки от начала файла и до первой встречи лексемы "<h2>".
Назовем это Чердак.

2. Убирает все строки от первой встречи лексемы "<center>" до конца файла.
Назовем это Подвал.


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

using namespace std;

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

string str = "<h2>"; // лексема для поиска
string str1 = "<center>"; // лексема для поиска
string tmp;
string s1;
//------------------
//введем два флага
bool f_01 = false;
bool f_02 = 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;

//-----------------------------------------------------------
// Уберем чердак
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;

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

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

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

to1<< tmp << endl;
break;
}

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

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

return 0;

}


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

Hosted by uCoz