Программа преобразования исходного текста на С++ в RTF-файл

Автор работы: Пользователь скрыл имя, 04 Июня 2012 в 12:17, курсовая работа

Краткое описание

Целью курсовой работы является разработка программного продукта, реализующего преобразование Си текста в RTF-файл. Для реализации поставленной цели были определены следующие задачи:
1. Разобрать структуру RTF-файла.
2. Реализовать алгоритм чтения файла.
3. Реализовать алгоритм преобразования Си в RTF.
4. Реализовать запись полученных данных в файл.

Содержание

Введение 3
I.Теоретический раздел 4
1.1 RTF- Rich Text Format 4
II. Технологический раздел 11
2.1. Стандартные заголовочные файлы. 11
2.2.Стандартные типы данных. 13
2.3. Описание собственных функций 14
Заключение 16
Литература 17
Приложение 18

Вложенные файлы: 1 файл

Документ Microsoft Word.doc

— 235.00 Кб (Скачать файл)

<iostream>(<iostream.h>) — заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio.h в Cи. iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно. Являясь частью стандартной библиотеки C++, эти объекты также являются частью стандартного пространства имён — std.

<cstdlib>(<stdlib.h>) — заголовочный файл стандартной библиотеки языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с C++ и известен в нём как cstdlib. Название «stdlib» расшифровывается как «standard library» (стандартная библиотека).

<cstring>(<string.h>) —   заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы с нуль-терминированными строками и различными функциями работы с памятью.Функции объявленные в string.h широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями, такими как ISO-8859-1; многобайтовые кодировки такие как UTF-8 будут работать, с отличием, что «длина» строки будет определяться как число байтов, а не число символов Юникода, которым они соответствуют.

<fstream> (сокращение от «FileStream») — заголовочный файл из стандартной библиотеки C++, включающий набор классов, методов и функций, которые предоставляют интерфейс для чтения/записи данных из/в файл. Для манипуляции с данными файлов используются объекты, называемые потоками («stream»).

Функции, включенные в данный файл, позволяют производить чтение из файлов как побайтово, так и блоками, и записывать так же. В комплект включены все необходимые функции для управления последовательностью доступа к данным файлов, а также множество вспомогательных функций.

Общедоступные функции

Это корневые функции библиотеки, не вошедшие ни в один из основных классов. Они используются довольно часто и могут быть применимы ко всем объектам потоков в каждом из классов.

        rdbuf. Все объекты fstream могут быть ассоциированы с объектом буфера файлов filebuf. Чтобы сопоставить объект класса fstream с объектом буфера, используют функцию rdbuf (без аргументов). Объект буфера предоставляет намного большие возможности по управлению данными в файле, чем стандартные функции подклассов fstream.

        open(). Этим методом можно открыть заданный файл, сопоставив его с одним из объектов потока. В зависимости от передаваемых аргументов, файл может быть открыт для чтения, для записи (либо для полной, либо для добавления данных), как бинарный, или как текстовый файл.

        is_open(). Функция, определяющая, открыт ли в данный момент файл, которому сопоставлен определенный объект потока. Возвращает булевское значение. Используется в основном для предотвращения ошибок доступа при попытке открыть уже использующийся файл. Без аргументов.

        close(). Функция закрывает файл, то есть прекращает доступ к нему, таким образом освобождая его для других функций или програм

 

2.2.Стандартные типы данных.

В данной программе используются следующие стандартные переменные:

            int целочисленный знаковый тип данных, диапозон от -32768…32767. Размер 1 байт

            char символьный тип данных, предназначенный для хранения одного символа в определённой кодировке. Если char определён как signed (знаковый), то его диапазон значений составляет от −127 до 127 (на единицу больше в положительную или отрицательную сторону, в зависимости от реализации). Если он определён как unsigned (беззнаковый), то его значения могут составлять от 0 до 255. Значение, содержащееся в этом типе, можно всегда безопасно привести к значению типа int. В Си нет примитивных типов для работы со строками, поэтому для работы с ними используется указатель char *.

Так же, C++ не поддерживает встроенный строковый тип. Однако он предоставляет два способа обработки строк. Во-первых, для представления строк можно использовать традиционный символьный массив с завершающим нулем. Во-вторых, можно использовать объекты класса string, которые я и использовал.

    В действительности класс string представляет собой специализацию более общего шаблонного класса basic_string. Существует две специализации типа basic_string:

        тип string, который поддерживает 8-битовые символьные строки, и

        тип wstring, который поддерживает строки, образованные двухбайтовыми символами.

    Существует три причины для включения в C++ стандартного класса string:

        непротиворечивость данных (строка определяется самостоятельным типом данных),

        удобство (программист может использовать стандартные С++ операторы) и

        безопасность (границы массивов отныне не будут нарушаться).

 

 

2.3. Описание собственных функций

string brackets (string &text) –функция вставки «\» перед скобками  { и }. Это позволяет программе, читающей RTF-последовательность, распознать, что символ не следует интерпретировать как управляющий.

string param (string &text) – функция  замены  символов  «\n» и «\r «на спецификатор RTF  «\par».

string colorCM(string &text)- фунция подсветки комментариев ,строгих /* ~*/, так и не строгих //.

string colorLib(string &text)- функция подсветки заглавных библиотек.

string colorIF(string &text,string &base) –функция подсветки условного оператора «if»

string colorFOR(string &text,string &base)- функция подсветки цикла  «for».

string colorDO(string &text,string &base) - функция подсветки цикла  «do».

string coloWHILE(string &text,string &base)- функция подсветки цикла  «while».

string colorSWITCH(string &text,string &base) - функция подсветки оператора  «switch».

string colorCASE(string &text,string &base) - функция подсветки инструкции  «case».

string colorDEFAULT(string &text,string &base) - функция подсветки инструкции  «default».

string colorRETURN(string &text,string &base) - функция подсветки инструкции  «return».

string colorCONTINUE(string &text,string &base) - функция подсветки инструкции  «continue».

string colorBREAK(string &text,string &base) - функция подсветки инструкции  «break».

string colorGOTO(string &text,string &base) - функция подсветки инструкции  «goto».

string colorNEW(string &text,string &base) - функция подсветки оператора  «new».

string colorDELETE(string &text,string &base) - функция подсветки оператора  «delete».

string colorNAMESPACE(string &text,string &base) - функция подсветки пространства имен .

string colorINT(string &text,string &base) - функция подсветки типа  «int».

string colorCHAR(string &text,string &base) - функция подсветки типа  «char».

string colorVOID(string &text,string &base) - функция подсветки типа  «void».

string colorFLOAT(string &text,string &base) - функция подсветки типа  «float».

string colorDOUBLE(string &text,string &base) - функция подсветки типа  «double».

string colorBOOL(string &text,string &base) -функция подсветки типа  «bool».

string colorSIGNED(string &text,string &base) - функция подсветки модификатора типа  «signed».

string colorUNSIGNED(string &text,string &base) -функция подсветки модификатора типа  «unsigned».

string colorLONG(string &text,string &base) - функция подсветки модификатора типа  «long».

string colorSHORT(string &text,string &base) - функция подсветки модификатора типа  «short».

void WRITE(string text) - функция записи полученного текста в файл.

 


Заключение

В настоящее время RTF все так же актуален, так как он является открытым.

Богатство (Rich) его заключено в том, что обычный текст обогащен секциями управляющих команд тэгами. Вначале этот формат был изобретен для текстового процессора Word, однако структура документа, которую могли читать многие процессоры, привела к тому, что формат"RTF" стал еще «богаче» - появилась уникальная возможность передачи форматированных тестовых данных между разными программами для чтения текстов и запускаемыми на разных операционных системах.
              Еще одним преимуществом, отличающим формат RTF" от формата “Doc является то, что по сравнению с последним, "RTF" это всего лишь текст, хоть и форматированный, следовательно, в нем нет макросов, под видом которых очень часто в документы Word (*doc, *docx) встраивают макровирусы. 

 

В результате написания курсовой работы была достигнута цель исследующие задачи:

      разобрана структура RTF

      реализован алгоритм чтения файлов

      реализовано преобразование Си в RTF

      реализована запись полученных данных в RTF-файл

 

 

 

 

 

 

Литература

1.      Базовый Курс С++,  Герберт Шилдт. 2007.

2.      http://ru.wikipedia.org/wiki/RTF - Rich Text Format

3.      Программирование на языке высокого уровня СИ. Часть II: практикум/ Сост. О. В. Шестопал, О. В. Сташкова. –  Тирасполь, 2010. – 83 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

#include <cstdlib>

#include <iostream>

#include <fstream>

#include <cstring>

 

using namespace std;

 

string param (string &text){

                     string par ("\\par ");

                     string endline("\r\n");

                     int position=0;

                     while(position!=-1){

                           position=text.find(endline);

                                         if (position!=string::npos){

                                            text.replace(position,1,par);

                                            return param(text);

                                         }

                                                 

                     }

return text;                                           

}

string brackets (string &text) {

                                string after("\\");

                                string after1("\\");                

                                int k=text.length();

                                int position=k;

                                    while(position!=-1){

                                                       

                                           if(text[position]=='{'){

                                              text.insert(position,after);

                                              position-=2;

                                           }

                                           if(text[position]=='}'){

                                              text.insert(position,after1);

                                              position-=2;

                                           }

                                          

                             

                                   position--;

                                   }

return text;

}

 

string colorCM(string &text){

                      string cm1("{\\i \\cf4 ");

                      string cm12("{\\i \\cf4 ");

                      string cm2("}");

                                                                        string cm21("}");

                      int k=text.length();

                      int position=0;

                                                                                                  while(position!=k){   

                                                                                                                                                                        if((text[position]=='/')  &&  (text[position+1]=='*')){

                                                                      text.insert(position,cm1);

                                                                      position+=9;

                                                                      k+=9;             

                                                                                                                                                                        }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

Информация о работе Программа преобразования исходного текста на С++ в RTF-файл