Основные функции DBSN на РНР




СУБВ DBSN

Краткое описание и инструкция по применению

 

Содержание:

Общее описание DBSN

Быстрый старт

Реализация на РНР

Реализация на VBA

Реализация на РНР

5 Реализация на С++

Использование на JavaScript

Использование на VBScript

Приложение 1 Список функций

Литература

 

Общее описание DBSN

 

DBSN – простейшая СУБД, обеспечивающая элементарные функции обработки частей текстового файла. Отдельные блоки текста (далее называем фрагментами - fragm) дописываются в конец текстового файла, а считываться в общем случае должны произвольным образом. Например, в блогах выдача информации ведется статьями, начиная с последней в сторону начала. При небольших размерах файлов в РНР можно просто загружать их в память, но в общем случае это не эффективно, поэтому для их обработки используют различные СУБД (в частности MySQL). В ряде задач типа ведения блога тяжелый функционал таких СУБД избыточен. Кроме того, при их использовании возникают дополнительные накладные расходы по времени обработки. Такие задачи успешно и более быстро решаются с помощью DBSN.

Из-за простоты DBSN легко реализуется на различных языках программирования. Некоторые из этих реализаций описаны ниже. Это позволяет легко подключать эту СУБД к другим программным продуктам, например, Microsoft Office и wsh скриптам.

В основу DBSN положен тот факт, что для произвольного доступа к фрагментам текстового файла необходима информация о начале и длине каждого фрагмента. В традиционных СУБД, например – FoxPro, это решается фиксацией длины фрагмента (записи) и помещением дополнительной информации в начало файла с таблицей. Одновременно жестко фиксируется и структура записи. В DBSN структурная информация выносится в отдельный бинарный файл, таким образом, таблица abcd состоит из 2х файлов:

abcd.dbs - собственно фрагменты

abcd.dbn -структурная информация о них

 

В файле abcd.dbs информация хранится в текстовом виде как набор текстовых блоков-фрагментов произвольного размера.

 

Каждый фрагмент состоит в общем случае из нескольких строк текста. Кроме того, его можно искусственно разделить на подстроки, вставляя в нужные места символ-оазделитель подстрок, в качестве которого будем использовать “|”.

 

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

 

Строки и Подстроки фрагмента нумеруются от 0

 

Файл abcd.dbn - бинарный с записями фиксированной длины (по 16 байтов).

Каждая запись abcd.dbn описывает 1 фрагмент и состоит из 4х целых чисел:

адрес начала фрагмента в файле

длина фрагмента

системный тэг фрагмента

прикладной тэг фрагмента

 

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

 

Фиксированный размер записи в файле *.dbn позволяет легко посчитать общее количество (count) фрагментов в dbs файле и обратиться к любому фрагменту непосредственно по его номеру.

 

Большинство функций DBSN возвращают по завершению положительный номер текщего фрагмента или отрицательный код при ошибке. Чтобы отделить эти случаи, нумерация фрагментов ведется от 1. Остальная информация передается по ссылкам

 

При добавлении фрагмента в таблицу он дописывается в конец dbs файла

а в бинарном файле dbn формируется одна запись с его параметрами.

 

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

 

Вся работа с файлом DBSN выполняется с помощью массива из 4х чисел(обработчика базы dbh):

dbh[0] – обработчик файла abcd.dbn

dbh[1] – обработчик файла abcd.dbs

dbh[2] – номер текущего фрагмента

dbh[3] – код ошибки операции

Этот массив формируется при открытии таблицы DBSN и используется во всех функциях ее обработки в качестве первого параметра

 

Для выборки нескольких записей используется понятие Блока.

Блок – это месив номеров записей

 

Быстрый старт

 

Для использования СУБД DBSN на странице РНР необходимо сначала подключить библиотеку dbsn. Для этого достаточно прописать в коде страницы

<?php

include "comm.php";

include "dbsn.php";

?>

После этого можно создать таблицу DBSN:

 

createDBSN(“proba”);

 

При этом будут созданы 2 пустых файла “proba.dbn”, “proba.dbs”.

Перед обработкой таблицы ее нужно открыть:

$dbh = openDBSN(“proba”);

После этого можно добавить в нее несколько фрагментов:

 

$fragm = “пробный фрагмент”;

$nom = addFragm($dbh, $fragm);

$nom = addFragm($dbh, “второй фрагмент”);

$nom = addFragm($dbh, $fragm. “Номер 3”);

Нумерацтя фрагментоа в DBSN начинается от 1, так что в пустую базу “proba” будут записаны фрагменты 1, 2, 3

После этого можно определить общее количество фрагментов в таблице

 

$count = countFragm($dbh);

 

За счет того, что нумерация ведется от 1, число фрагментов (3) совпадает с номером последнего фрагмента в таблице.

 

Операции извлесения и изменения данных выполняются только с текущим фрагментом, поэтому предварительно нужно установить номер текущего фрагмента

 

$nom = 2;

$nom = setNom($dbh, $nom);

$fragm1 = “”;

$nom = getFragm($dbh, $fragm1);

 

Здесь в переменную $fragm1 будет считан фрагмент номер 2.

Замена текущего фрагмента выполняется функцией setFragm ():

 

$fragm = “new value of 2dn fragment”;

$nom = setFragm($dbh, $fragm);

 

Для удаления текущего фрагмента используют функцию delFragm ():

 

delFragm($dbh);

 

Все рассмотренные функции кроме createDBSN() возвращаютномер текущей записи или 0 при ошибке, поэтому результат действия легко проверить:

 

if (! setFragm($dbh, $fragm))

//-- обработчик ошибки;

 

После завершения манипуляций с таблицей ее нужно закрыть

 

closeDBSN($dbh);

 

Реализация на РНР

На РНР база DBSN реализована с помощью 2х файлов:

comm.php - обшие функции, не использующие обоаботчик базы $dbh,

но используемые в качестве вспомогательных для DBSN

dbsn.php - функции непосредственно реализующие всю обработку DBSN

таблиц

для применения DBSN при ответе сервера на запрос в начале PHP файла достаточно подключить их:

 

<?php

include "comm.php";

include "dbsn.php";

?>

 

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

 

Основные функции DBSN на РНР

function createDBSN($fil_name)

создать пустую таблицу

здесь: $fil_name - имя файла без расширения

возвращает 0 при ошибке и 1 при успехе

содает 2 пустых файла бинарный и текстовый

function openDBSN($fil_name)

открыть таблицу фрагментов DBSN

здесь: $fil_name - имя файла без расширения

возвращает 4х элем числовой массив обработчика или 0 при ошибке

 

function closeDBSN(&$dbh)

Закрыть таблицу фрагментов DBSN

здесь: &$dbh – ссылка на обработчик таблицы

возвращает 1 при успехе или 0 при ошибке

 

function countFragm(&$dbh)

Сосчитать число записей в таблице DBSN

здесь: &$dbh – ссылка на обработчик таблицы

возвращает общее количество записей или 0 при ошибке

function setNom(&$dbh, $new_nom)

установить номер текущего фрагмента

здесь: &$dbh – ссылка на обработчик таблицы

$new_nom – новый номер текущего фрагмента

возвращает номер новой текущей записи или 0 при ошибке

 

function incNom(&$dbh)

увеличить номер текущего фрагмента

здесь: &$dbh – ссылка на обработчик таблицы

возвращает номер новой текущей записи или 0 при ошибке

 

function decNom(&$dbh)

уменьшить номер текущего фрагмента

здесь: &$dbh – ссылка на обработчик таблицы

возвращает номер новой текущей записи или 0 при ошибке

 

function setFirst(&$dbh)

установить номер фрагмента равным 1

здесь: &$dbh – ссылка на обработчик таблицы

возвращает номер новой текущей записи или 0 при ошибке

 

function setLast(&$dbh)

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

здесь: &$dbh – ссылка на обработчик таблицы

возвращает номер новой текущей записи или 0 при ошибке

function findFragmOnSubst(&$dbh, $find_subst, $subst_nom, $nom_beg)

Найти фрагмент таблицы DBSN по заданной подстроке фрагмента

здесь: &$dbh – ссылка на обработчик таблицы

$find_subst - подстрока поиска

$subst_nom - номер искомой подстроки во фрагменте

$nom_beg - номер фрагмента, с которого начинается поиск

просматривает все активные фрагменты начиная с $nom_beg

и останавливается если находит в каком-нибудь заданную подстроку

возвращает номер записи или 0 при ошибке если не нашла

function getFragm(&$dbh, &$fragm)

Считать текущий фрагмент таблицы DBSN

здесь: &$dbh – ссылка на обработчик таблицы

&$fragm – переменная, в которую считываем фрагмент

возвращает номер записи, -номер записи, если она удалена

или 0 при ошибке или пустой записи

function addFragm(&$dbh, $fragm, $len_beg = 0, $tag = 0)

Добавить запись в таблицу фрагментов DBSN

здесь: &$dbh – ссылка на обработчик таблицы

&$fragm – переменная, содержащая добавляемый фрагмент

$len_beg, $tag - числовые параметры(по умолчанию - 0

возвращает номер добавленой записи(равный их количеству)

или 0 при ошибке

 

function setFragm(&$dbh, $fragm, $len_beg = -1, $tag = -1)

Записать текст в текущую запись таблицы DBSN

здесь: &$dbh – ссылка на обработчик таблицы

&$fragm – переменная, содержащая добавляемый фрагмент

$len_beg, $tag - числовые параметры(по умолчанию – 1

( в таком случае сохраняет старые значения этих параметров)

возвращает номер текущей записи или 0 при ошибке

 

function delFragm(&$dbh)

Удалить текущий фрагмент таблицы DBSN

здесь: &$dbh – ссылка на обработчик таблицы

просто делает его длину отрицательной

возвращает номер записи или 0 при ошибке

Вспомогательные функции

 

function dbg($fn_vr, $vr)

вывести сообщение о значении переменной $vr в функции $fn

 

function getSubst($st, $nom_sub)

получить подстроку с заданным номером ($nom_sub) из строки $st

подстроки нумеруются слева от 0

function getFragmLen(&$dbh, &$rec_size)

получить длину текущего фрагмента таблицы DBSN

здесь:

&$dbh – ссылка на обработчик таблицы

&$rec_size – ссылка на переменную в которую будет записана

длина фрагмента

возвращает номер текущей записи или 0 при ошибке

 

function isActive(&$dbh)

проверить активна ли текущая запись(не удалена)

здесь:

&$dbh – ссылка на обработчик таблицы

возвращает номер записи если запись активна или 0 при ошибке

 

function getError(&$dbh)

получить признак ошибки последней операции

здесь:

&$dbh – ссылка на обработчик таблицы

При отсутствии ошибки возвращает 0

 

function clearError(&$dbh)

очистить признак ошибки таблицы

здесь:

&$dbh – ссылка на обработчик таблицы

 

function getTextHead($text)

получить начальную строку текста $text (заголовок)

 

function getTextBody($text)

получить остаток текста $text без начальной строки(заголовка)

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: