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

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

Еще один html-транслятор
Эта программа выполняет ту же задачу, что и Программа 01_02, но результат на мой взгляд более удачный.
В последнее время я использую этот транслятор.

Программа 01_05


// Example_01_05 html-транслятор
#include <fstream.h>
#include <iostream.h>
#include <string.h>

//using namespace std;

bool flag1 = true;

void fun1(bool &fl) {

flag1 = fl;
}

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

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

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

ofstream to1("text2" ); // open for writing
if(!to1) {

cout<<"Vyhodnoi fail ne naiden:" ;
to1.close(); // always pays to be tidy
return (1);
}

//--------------------------------------------------
int m = 0;

char buf[1024];
char buf1[2048];
char buf1a[2048] = "";
char buf1b[2048] = "";

char bufClear[] ="";

char* buf10;
buf10 = new char[];
buf10 = "<br>";


char* buf11;
buf11 = new char[];
buf11 = "<DIV CLASS=\"block_2\">";

char* buf12;
buf12 = new char[];
buf12 = "</DIV CLASS=\"block_2\">" ;

char* buf15;
buf15 = new char[];
buf15 = "<P>";

char* buf16;
buf16 = new char[];
buf16 = "}";

//--------------------------------------------------

while (!from1.eof()) {

from1.getline(buf,sizeof(buf));

m = 0;
int i = 0;

//--------------------------------------------------
//--------------------------------------------------

//вставим тег <P> если пустая строка

if(strlen(buf)==0) {

m = 1;

for(int r =0;r<4;r++) // вставим тег пробела {

buf1[m] = buf15[r];
m++;
}

buf1[m] = '\r';
m++;

for(r =1;r<4;r++) // вставим тег пробела {

to1 << buf1[r];
}

to1 << '\r';

fun1(flag1=false);
continue;

}

////////////////////////////

for( i = 0;i<=1024;i++) {

if(buf[i] =='{') {

//копируем найденный символ '{' в массив buf1
buf1[m] = buf[i]; m++;

//делаем вставку лексемы из массива buf11 в массив buf1
for(int k =0;k<21;k++) {

buf1[m] = buf11[k];
m++;
}

//лексема вставлена сбросим флаг
fun1(flag1=false); //знак конца строки есть

continue;

}//end if

//--------------------------------------------------
//--------------------------------------------------

if(buf[i] =='}') {

//делаем вставку лексемы из массива buf12 в массив buf1
for(int l =0;l<22 ;l++) {
buf1[m] = buf12[l];
m++;
}

//копируем найденный символ '}' в массив buf1
buf1[m] = buf[i];
m++;

continue;

} // end if

//--------------------------------------------------
//--------------------------------------------------

buf1[m] = buf[i];
m++;

} // end for


//--------------------------------------------------

//Во временном массиве buf1 содержится модифицированная строка buf

//если в предыдущей строке была лексема <DIV CLASS="block_2">
if(strstr(buf1b, buf11)) {

to1 << buf1 << "\n"; // and write it to the file
strcpy(buf1b, bufClear);
continue;
}


//если в предыдущей строке была лексема </DIV CLASS="block_2">
if(strstr(buf1b, buf12)) {

strcat(buf1a,buf10); // поместим тег <br> в buf1a

strcat(buf1a,buf1); // дополним buf1a строкой buf1
to1 << buf1a << "\n"; // and write it to the file

strcpy(buf1b, buf1a); // сохраним buf1a в buf1b
strcpy(buf1a,bufClear); //очистим buf1a

fun1(flag1=true);

continue;

}


if(flag1 == true ) //если пробела в предыдущей строке нет
strcat(buf1a,buf10); // поместим тег <br> в buf1a

strcat(buf1a,buf1); // дополним buf1a строкой buf1
to1 << buf1a << "\n"; // and write it to the file

strcpy(buf1b, buf1a); // сохраним buf1a в buf1b
strcpy(buf1a,bufClear); //очистим buf1a

fun1(flag1=true);

} //end while


//--------------------------------------------------

from1.close(); // always pays to be tidy

to1.close(); // always pays to be tidy

return 0;

}


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

Hosted by uCoz