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

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

Транслятор html-кода

Задача: Тот, кто вручную переводил текстовый файл в html-код знает, как много надо поставить тегов в текст, чтобы он правильно отражался в html-странице. Число тегов на одной странице идет на десятки и сотни. Данная программа существенно поможет в этой работе.

Эта программа ставит тег пробела <P> на месте пробелов.
Ставит тег переноса строки <br> в конце строк.
Кроме того программа правильно оформляет отступы во вложенных блоках, оформленных
фигурными скобками {}. Для этого после открывающейся скобки ставится тег <DIV CLASS="block_2">, после закрывающей скобки - тег </DIV CLASS="block_2">

Естественно, чтобы теги правильно работали нужен файл style.css и ссылка на него на html-странице.
Файл находится здесь: style.css.

Программа 01_02


// Example_01_02 Транслятор 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>";

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

// Теперь считываем из файла построчно:

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);//тег <p> вставлен!
continue;

}

// Строка не пустая, в цикле for анализируем посимвольно считанную строку,
// ищем в ней символы '{' и '}'.
// Если не находим, то просто копируем символ в buf1 и инкременируем индекс массива.
// Если находим, то выполняем один из блоков if.


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++;
}

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
// Таким образом программа проанализировала строку на предмет присутствия в ней
// символов '{' и '}', где необходимо были вставлены соответствующие лексемы.
// И результат (модифицированная строка) помещен в массив buf1.

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

to1 << buf1 << "\n"; // копируем модифицированную строку в файл
strcpy(buf1b, bufClear); // очистим buf1b
continue;
}

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

strcat(buf1a,buf1); // дополним buf1a строкой buf1
to1 << buf1a << "\n"; // запишем buf1a в файл

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

fun1(flag1=true); //восстановим флаг

} //end while

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

from1.close();

to1.close();

return 0;

}


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

Hosted by uCoz