Возврат диапазона по началу слова. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Возврат диапазона по началу слова.



int RestNumb(long *NMin, long *NMax, char *word); — функция выдает диапазон номеров слов, начальная часть которых совпадает с заданным словом.

Для заданного слова word (слово подвода) выдается диапазон номеров (от NMin до NMax включительно) всех слов, у которых начальная часть совпадает с данным словом.

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

Функция возвращает 0, если номер находится вне допустимого диапазона номеров, при этом значение NMax выдается меньше, чем значение NMin (т. е. диапазон оказывается пустой).

Если выполнить данную функцию с пустым словом, то в качестве NMax получим число слов в словаре.

Пример:

SLV s1; int k; long n1, n2; char sw[500];

k=s1.RestNamb(&n1,&n2,”Аб”);

k=s1.RestNamb(&n1,&n2,””); в этом случае для непустого словаря n1 = 1;

n2 = число слов в словаре;

s1.RestNamb(&n1,&n2,”Слово не содержится в словаре”); — в этом случае n1 = 1 и n2 = 0, что определяет пустой диапазон слов словаря.

Сохранение словаря.

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

Если в объявлении словаря указан в качестве параметра файл, то автоматически создается пустой словарь, если до этого такого файла не было.

Если файл словаря существовал, то он открывается для работы.

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

Если для работы требуется сохранить данные в словаре до завершения, то можно использовать функцию: int SaveSlv(); которая приведет к сбрасыванию текущего состояния словаря в файл.

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

В процессе работы со словарями, которые привязаны к файлу, не происходит блокирование файла до момента сброса данных в файл, который происходит либо при выполнении функции int SaveSlv(), либо при завершении работы со словарем.

Для очистки словаря, который привязан к файлу, можно использовать функцию:

void Clear();

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

Создание БД.

База данных регистрационных параметров должна определятся через набор полей БД.

Папка SDBDOC – БД регистрационных параметров, состоящая из трёх файлов: Справочника, диспетчера и хранилища (рис. 2).

Описание БД находится в справочной системе. В справочнике регистрируется код списка словарей справочника

KOD K01 Кодировка разделов

KOD P02 Поле - название (рус.)

KOD P04 Поля отбора для включения в разделы

KOD P05 Поля уточнения разделов

«Кодировка разделов» служит для определения с каким разделом работать.

«Поле - название» - это дескрипторы, которые описываются в базе данных, определяются нумерацией полей.

Файл «005.TXT» содержит в себе список студентов в виде: <Код раздела> <Группа> <Порядковый номер в списке> <ФИО студента>

 

Хранение ведётся в словарном виде. В папке DATA хранится выгруженная БД.

Пример БД:

Файл «report.txt»

000001 01 01 202004241638382 Балабушка К1-21б.pdf

000001 01 02 202004241748580 Дз2. Балабушка К1-21б.pdf

000001 01 03 202004251125480 Дз3.,мат.логика. Балабушка к1-21Б.docx

000001 01 04 202004251126892 дз4. Балабушка к1-21Б.pdf

000001 01 05 202004251127589 Дз5. Балабушка К1-21б.pdf

000001 01 06 202004251127619 Балабушка К1-21Б(1).pdf

000001 01 07 202005020944079 Балабушка К1-21б, Дз7.pdf

000001 01 08 202005071055185 Дз8. Балабушка К1-21Б.pdf

000001 01 09 202005110959444 Реализация булевой функции в среде OwenLogic.docx

000001 01 10 202005121742340 Исчисление Предикантов.pdf

000001 01 11 202005151304454 Теория Автоматов.pdf

000001 01 12 202005161009213 Абстрактный автомат. Балабушка к1-21б.docx

000001 01 13 202005171146486 Структурный автомат. Балабушка к1-21б.docx

000001 01 14 202005290953457 Канонический Метод.pdf

000001 01 15 202005300947975 Теория автоматов. Эдементарные автоматы..docx

 

Значение четвёртой записи «202004241638382» содержит в себе:

2020 – год загрузки файла;

04 – месяц загрузки файла;

24 – день загрузки файла;

1638 – час и минута загрузки файла;

382 – последние три числа размера файла.

Такая кодировка названия создаётся для того, чтобы все файлы имели своё уникальное название.

Текущее хранение раздела берёт информацию о каждом поле из каждой записи, которая отображается на формах.

000001 P 03 00 03.09.2019

000001 P 03 01 Да

000001 P 03 02 Да

000001 P 03 03 Да

000001 P 04 00 17.09.2019

000001 P 04 01 Да

000001 P 04 02 Да

Здесь закодировано какая вкладка используется, строка и столбец и хранится ли что-то в ячейке.

Сохранение информации реализуется следующим образом:

void __fastcall TForm3::Save()

{char ss[500],sn[100],sk[200]; int j,r,p;

 strcpy(sn,ComboBox1->Text.c_str());

 sn[6]=0;

 sprintf(ss,"arch\\%s.dat",sn);

 unlink(ss);

 SLV s1(ss);

 j=2;

 for (int k=0;k<StringGrid1->RowCount;k++)

{if(StringGrid1->Cells[j][0]!="")

{if(StringGrid1->Cells[j][k]!="")

  {sprintf(ss,"%s P %02d %02d %s",sn,j,k,StringGrid1->Cells[j][k]);

   s1.ADD(ss);

  }

}

}

 for (int j=2;j<StringGrid1->ColCount;j++)

 {for (int k=0;k<StringGrid1->RowCount;k++)

{if(StringGrid1->Cells[j][0]!="")

{if(StringGrid1->Cells[j][k]!="")

  {sprintf(ss,"%s P %02d %02d %s",sn,j,k,StringGrid1->Cells[j][k]);

   s1.ADD(ss);

    }

if(StringGrid2->Cells[j][k]!="")

  {sprintf(ss,"%s V %02d %02d %s",sn,j,k,StringGrid2->Cells[j][k]);

   s1.ADD(ss);

  }

}

}

 }

 for (int j=0;j<StringGrid3->ColCount;j++)

for (int k=1;k<StringGrid3->RowCount;k++)

if(StringGrid3->Cells[j][k]!="")

{sprintf(ss,"%s S %02d %02d %s",sn,j,k,StringGrid3->Cells[j][k]);

s1.ADD(ss);

}

 SLV_FILE(&s1,"data\\s1.txt");

}

Создание базы данных

При создании новой базы данных требуется:

• сформировать три новых файла (рис. 2)

◦ Диспетчер —.tgr

◦ Файл (или файлы) хранения данных —.tgs

◦ Справочник —.spr.

 

Рис. 8 Файлы необходимые для создания БД

• сформировать папку SPR, где будут храниться файлы словарей справочника (рис. 2);

• инициализировать базу данных.

Для создания и инициализации базы данных в TGRBD используется информационная сервисная функция.

В качестве информационных сервисных функций в TGRBD выступают шесть перегруженных функций DWPROC:

1. int DWPROC(int kod, SLV *slin, SLV *slout, SLV *slerr, void (*drawProgress)(int a));

2. int DWPROC(int kod, SLV *slin, SLV *slout, SLV *slerr);

3. int DWPROC(int kod, char *sin, SLV *slout, SLV *slerr);

4. int DWPROC(int kod, char *sin, char *sout, char *serr);

5. int DWPROC(int kod, char *sin, char *serr);

6. int DWPROC(int kod, char *serr);

где

• kod — код функции,

• slin — словарь запроса,

• sin — слово запроса,

• slout — словарь результата,

• sout — слово результата,

• slerr — словарь ошибок, предупреждений или другой информации,

• serr — ошибка, предупреждение или строка информации,

• drawProgress (int a) — функция, возвращающая процент выполнения.

Первая форма с функцией прогресса используется обычно для запросов к базе данных с длительным временем выполнения запроса. Для инициализации и создания базы данных обычно не используется.

Коды функции начинаются со 100, начальные коды 0 — 99 используются как управляющие в клиент-серверной реализации.

Для создания и инициализации базы данных используется сервисная функция с кодом 135.

Данная функция позволяет независимо друг от друга провести:

• инициализацию и создание базы данных;

• инициализацию справочной системы.

Если база данных и справочник базы данных существуют, то данная функция выполнит соответствующую инициализацию.

Для инициализации и создания базы данных может быть использована любая из пяти первых перегруженных информационных функций. Для этого в словарь запроса или слово запроса помещается слово в формате:

1<Имя файла базы данных>.tgr

Имя файла базы данных должно быть указано вместе с путем.

Например, слово запроса может быть в виде “1RDB\\ BD.TGR”.

Для инициализации справочной системы слово запроса дается в формате

2<Имя файла базы данных>.spr

Например, слово запроса может быть в виде “2RDB\\ BD.SPR”.

Использование словаря в качестве запроса на инициализацию или создание позволяет выполнить одновременно инициализацию или создание файла базы данных и словаря-справочника.

Пример.

#include "tgr.h"

#include "tgrbd.h"

#include "DBSRV.h"

#include "tgrsrv.h"

#include "RDB.h"

 

__fastcall TForm1::TForm1(TComponent* Owner)

  : TForm(Owner)

{SLV s0,s1,s2,s3; char ss[500]; long n1,n2; String s;

 STInitSPR("SDBDOC\\SDBDOC");

 s1.ADD("SDBDOC\\SDBDOC.spr");

 DWPROC(1004,&s1,&s2,&s3);

 STConnect("SDBDOC\\SDBDOC");

Если создается новая база данных, то выполнение этой функции приведет к образованию в папке RDB файла диспетчера базы данных с пустым словарем (будет создан файл “RDB\\BD.TGR” размером 39 байт) и пустым справочником (файл “RDB\\BD.SPR” размером 39 байт). Файл данных “RDB\\BD.TGS” появится, когда в базу данных будут помещены первые записи.

В простом виде инициализация базы данных может быть выполнена в виде одной строки обращения к пятой перегруженной функции DWPROC:

DWPROC(135, ”1RDB\\ BD.TGR”, ss);

где ss — строка, объявленная в виде char ss[200];

Папку SPR функция 135 не создает. Поэтому желательно вместе с инициализацией новой базы данных одновременно создать папку SPR.

Не рекомендуется создавать различные базы данных в одной папке, так как для них будет создана единая папка справочника SPR, что приведет к смешению словарей-справочников для разных баз данных в одной папке.

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



Поделиться:


Последнее изменение этой страницы: 2021-07-19; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.19.251 (0.023 с.)