Загрузка в базу данных реляционных таблиц из текстового файла 


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



ЗНАЕТЕ ЛИ ВЫ?

Загрузка в базу данных реляционных таблиц из текстового файла



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

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

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

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

Хорошо известен текстовый формат CSV(от англ. CommaSeparated Values — значения, разделенные запятыми), предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой (,). Однако большинство программ вольно трактует стандарт CSV и допускает использование иных символов в качестве разделителя. В полях таблицы с текстовой информацией часто встречаются запятые. Запятые могут использоваться как десятичный разделитель. Замена разделителя на точку с запятой обычно требует поместить содержимое полей таблицы в обрамляющие двойные кавычки (“); если в значении встречаются кавычки, они представляются в файле в виде двух кавычек подряд. Другим решением является использование в качестве разделителей символов табуляции (0x0D). В любом случае требуется программно проверять количество разделителей в каждой строке текстового файла. Строки разделяются парой символов CR LF (0x0D 0x0A).

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

Определим текстовый файл (*.txt), представляющий таблицу следующим образом:

• разделителями полей таблицы в файле являются табуляторы (0x09);

• строки разделяются парой символов CR LF (0x0D 0x0A)

• в первой строке файла дается кодировка полей таблицы, задаются коды полей через разделители;

• во второй строке дается русское название всех полей таблицы через разделители (названия столбцов таблицы);

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

• первым параметром каждой строки таблицы указывается номер строки. Для номера строки резервируем код поля P001;

• в каждой строке на втором месте стоит название таблицы;

• название таблицы считаем обычным полем, для которого резервируем код P002;

• за названием поля, в котором будет стоять имя таблицы, резервируем стандартное название “Таблица”.

Включение имени таблицы в качестве значения поля “Таблица” позволяет рассматривать имя таблицы наравне с другими полями. Этот подход упрощает формат запросов на поиск информации. В этом случае можно обращаться с именем таблицы как с обычным полем и включать его значение в поисковый запрос.

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

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

P001 P002 P003 P004

NN Таблица Код вида Вид обучения обучения

1 Кодировка видов обучения А Итоговая аттестация, выпускные экзамены

2 Кодировка видов обучения Г Гос. экзамены и защита

3 Кодировка видов обучения Д Выпускная работа. Диссертация

4 Кодировка видов обучения К Каникулы

5 Кодировка видов обучения П Другие практики, НИР

6 Кодировка видов обучения Т Теоретическое обучение

7 Кодировка видов обучения У Учебная практика

8 Кодировка видов обучения Э Экзаменационная сессия

Текстовый файл, подготовленный в таком виде, содержит информацию:

• кодировку атрибутов и названия атрибутов. Данная информация должна быть загружена в справочник БД;

• данные (значения атрибутов) для загрузки в базу данных.

Эти две задачи (загрузку в справочник и загрузку в базу данных) можно рассматривать независимо.

Остановимся на решении второй задачи — загрузка данных в базу данных.

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

Функция прямого управления базой данных имеет вид

int DWPROC(SLV *slkd,SLV *slin,SLV *slout,SLV *slerr, void (*drawProgress)(int a))

где

• slkd — словарь действий;

• slin — словарь условий;

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

• slerr — словарь ошибок;

• drawProgress — функция для отображения процента выполнения.

При успешном выполнении функции код возврата = 0. Пример обращения к функции: SLV s0,s1,s2,s3;

j=DWPROC(&s0,&s1,&s2,&s3,drawProgress);

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

void drawProgress(int prc)

{;

}

Одним из вариантов загрузки записей в базу данных является использование словаря slkd. При этом остальные словари должны быть пустыми.

Имеется несколько форматов подготовки данных для помещения в словарь slkd.

Основным форматом для загрузки новых записей является

I.nnnnnn.kkk.PNNN= <значение>

где

• “I.” команда вставки;

• nnnnnn — число, выровненное до заданного размера добавлением нулей в начало, для каждой записи должно быть свое число;

• kkk — номер позиции, определяет возможность ввода информации в постреляционную базу данных;

• PNNN — кодировка атрибута.

Числа nnnnnn для каждой записи должны быть уникальными, конкретное значение числа nnnnnn безразлично.

Например, для загрузки в БД двух записей можно включить в словарь slkd следующие строки:

001.001661.046.P013=Хорошев Артём Алексеевич

001.001661.047.P011=19

001.001661.048.P013=Шелопугин Виталий Дмитриевич

001.001661.049.P011=20

001.001661.050.P013=Щербакова Анастасия Александровна

001.001661.051.P011=21

001.001661.052.P013=Яркиев Данил Маратович

001.000568.002.P002=2019 / 2020

001.000568.003.P003=Космический

001.000568.004.P004=К1

001.000568.005.P005=Уткин Г.С.

001.000568.006.P006=Программирование и основы алгоритмизации

001.000568.007.P007=К1-21Б

что равносильно включению следующих строк:

001.000001.046.P013=Хорошев Артём Алексеевич

001.000001.047.P011=19

001.000001.048.P013=Шелопугин Виталий Дмитриевич

001.000001.049.P011=20

001.000001.050.P013=Щербакова Анастасия Александровна

001.000001.051.P011=21

001.000001.052.P013=Яркиев Данил Маратович

001.000002.002.P002=2019 / 2020

001.000002.003.P003=Космический

001.000002.004.P004=К1

001.000002.005.P005=Уткин Г.С.

001.000002.006.P006=Программирование и основы алгоритмизации

001.000002.007.P007=К1-21Б

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

001.000001.086.P013=Хорошев Артём Алексеевич

001.000001.095.P011=19

001.000001.062.P013=Шелопугин Виталий Дмитриевич

001.000001.035.P011=20

001.000001.066.P013=Щербакова Анастасия Александровна

001.000001.087.P011=21

001.000001.059.P013=Яркиев Данил Маратович

001.000002.054.P002=2019 / 2020

001.000002.085.P003=Космический

001.000002.026.P004=К1

001.000002.005.P005=Уткин Г.С.

001.000002.044.P006=Программирование и основы алгоритмизации

001.000002.031.P007=К1-21Б

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

Если загрузку данных необходимо выполнить в другой блок, то в словарь slkd добавляется команда

I.P000=bbb

— требование загрузить в заданный блок, где bbb — номер блока.

Номер блока указывается выровненным трехзначным числом в диапазоне от 1 до 900.

Можно задать одновременную загрузку в один или несколько блоков, используя следующий формат представления значения атрибута:

I.bbb.nnnnnn.kkk.PNN

где bbb – номер блока.



Поделиться:


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

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