Читать статья по информатике, вычислительной технике, телекоммуникациям: "Документация на основе RTF-шаблона" Страница 3

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

закладки

Пример такой закладки:

…{\*\bkmkstart ndoc}{\*\bkmkend ndoc}…

Для решения данной задачи можно предложить следующий алгоритм.

Читаем последовательно строки входного файла (в большинстве случаев строка больше 255 символов).

Ищем в текущей строке тег '\bkmkstart'.

Если находим, то выделяем название закладки и сравниваем его с искомой.

Если совпадает, то записываем строковую строку данных после закрывающей скобки (}).

Алгоритм реализован в виде функции In_Zakl1(pth As String, zakl As String, data As String), где pth - имя RTF-файла, zakl - имя закладки, data - строка для добавления в файл.

Добавление строк в таблицу

Предположим, нам требуется найти m-ю строку в n-той таблице и повторить ее в этой таблице p раз. Для поиска начала строки таблицы мы будем использовать тег \intbl, а для поиска конца - тег \row. Конец самой таблицы определяется по последовательности тегов \row…\pard…\par.

Алгоритм решения этой задачи следующий.

Читаем последовательно строки входного файла.

Ищем последовательность …\row…\pard…\par…\intbl… (не обязательно в одной строке) (n-1) раз. После этого мы находимся в начале нужной таблицы.

Ищем тег \row (m-1) раз. После этого находимся перед нужной строкой таблицы.

Ищем следующий тег \row и копируем содержимое файла от (m-1)-го до m-го тега \row (между \row и \intbl содержатся настройки строки, они нам тоже нужны).

Вставляем после m-го тега \row скопированную нами подстроку p раз.

Следует отметить, что недостатком предложенного алгоритма является то, что он может копировать любую строку таблицы, кроме первой. Но в большинстве случаев первая строка является "шапкой" документа и копировать ее нет необходимости.

Алгоритм реализован в виде функции In_TStr (pth As String, itbl As Integer, irow As Integer, kol As Integer), где pth - имя RTF-файла, itbl - номер таблицы, irow - номер строки, kol - количество повторов строки.

Заполнение ячейки таблицы

Представим, что требуется найти k-ю ячейку в m-й строке n-й таблицы и вставить в нее текстовую строку данных. Пример таких ячеек:

...{\lang1033\cgrid0

\cell\cell}…

Задача может быть решена по следующему алгоритму.

Читаем последовательно строки входного файла.

Ищем последовательность …\row…\pard…\par…\intbl… (не обязательно в одной строке) (n-1) раз. После этого мы находимся перед нужной нам таблицей.

Ищем тег \row (m-1) раз. После этого мы находимся в начале нужной строки таблицы.

Ищем k-e вхождение тега \cell.

Вставляем перед ним строку данных.

Данный алгоритм реализован в виде функции In_Tcell1(pth As String, itbl As Integer, irow As Integer, icell As Integer, ndata As String), где pth - имя RTF-файла, itbl - номер таблицы, irow - номер строки, icell - номер ячейки, data - строка для занесения в ячейку.

Программа на VisualBasic, демонстрирующая применение такой технологии и функционально идентичная программе, приведенной в начале этой статьи, выглядит так:

' NumStr - кол-во строк в отчете

' NewData (5,NumStr) - массив с данными для заполнения

' таблицы, заранее приведенными к символьному виду

' Itog - сумма, приведенная к символьному виду

' pth - путь к файлу

' Str_ndoc = "BS190"

' Str_name = "Петров И.И."

Dim res As Boolean ' результат выполнения функций

' заполняем "шапку документа" - номер и получатель

' - закладки 'ndoc' и 'name' соответственно

res = In_Zakl1(pth, "ndoc", Str_ndoc)

res = In_Zakl1(pth, "name", Str_name)

' вставляем нужное кол-во строк-1

' (т.к. одна уже есть в


Интересная статья: Быстрое написание курсовой работы