Написание простой базы данных для простых задач

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

В написании кода ‘ядра’ я не использовал взаимодейсвия с файлами, БД во время работы программы находится в списке, а функция, необходимая для её сохранения или парсер, превращает список в строку или наоборот соответственно. Сделанно это для удобства переноса кода на другие языки программирования.

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

Функция init возвращает список, содержащий информацию о количестве столбцов в коде, количество строк вычисляется по формуле:

общее_количество_яйчеек_с_информацией/количество_столбцов.

Функция parse принимает строку, а возвращает список с базой данных.

def init():
    dblist = [1]
    #$
    return dblist

def parse(string):
    dblist = []
    var = ''
    x = 0
    y = len(string)
    #-
    if(string[y - 1] == '!'):
        while(x != y):
            while(string[x] != '!'):
                #-
                var += string[x]
                x += 1
            dblist += [var]
            var = ''
            x += 1
        #-
        var = dblist[0]
        dblist[0] = int(var)
        #$
        return dblist
    else:
        return '$err'

Переменная dblist — это и есть база данных, функции изменяющие БД принимают этот список в качестве параметра, изменяют и возвращают.

Неудобно, не находите?

Также вы могли заметить, что функция parse может вернуть ошибку, обработчик этих ошибок мы тоже разберем.

Далее написаны были функции записи и чтения из БД.

def write(dblist, pos, data):
    leN = len(dblist)
    leN -= 1
    #-
    if (pos > leN):
        while(leN != pos):
            #-
            dblist.append(' ')
            leN += 1
        #-
        dblist[pos] = data
    else:
        #-
        dblist[pos] = data
    #$
    return dblist

def read(dblist, pos):
    leN = len(dblist)
    if (pos > leN):
        #$
        return '$err'
    else:
        #$
        return dblist[pos]

Функция read тоже может вернуть ошибку при неверно указанной позиции данных.

Самыми короткими оказались функции создания и удаления столбца.

def mkcol(dblist):
    dblist[0] += 1
    #$
    return dblist

def delcol(dblist):
    dblist[0] -= 1
    #$
    return dblist

И наконец — функция сохранения всего этого в строку.

def save(string, dblist):
    x = 0
    while(x != len(dblist)):
    #-
        string += str(dblist[x])
        string += '!'
        #-
        x += 1
    return string

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

import core as db

# "ERR_PARSE_END-OF-DB"
# "ERR_READ_POS"

def init():
    return db.init()

def parse(string):
    ret = db.parse(string)
    if ret == '$err':
        print("ERR_PARSE_END-OF-DB")
    else:
        return ret

def save(string, dblist):
    return save(string, dblist)

def mkcol(dblist):
    return db.mkcol(dblist)

def delcol(dblist):
    return db.delcol(dblist)

def write(dblist, pos, data):
    return db.write(dblist, pos, data)

def read(dblist, pos):
    ret = db.read(dblist, pos)
    if ret == '$err':
        print('ERR_READ_POS')
    else:
        return ret

P.S.: Использовать эту БД можно например для сохранения данных о персонажах и объектах в небольших самописных видеоиграх.

Вам также может понравиться

About the Author: admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *