Идея написания несложной по своему устройству базы данных появилась случайно, но это была одна из тех идей, которые мне захотелось реализовать.
В написании кода ‘ядра’ я не использовал взаимодейсвия с файлами, БД во время работы программы находится в списке, а функция, необходимая для её сохранения или парсер, превращает список в строку или наоборот соответственно. Сделанно это для удобства переноса кода на другие языки программирования.
Начать я решил с написания функций необходимых для взаимодействия с базой данных, таких как создание базы данных или парсинг уже созданной базы данных. Функции получили название 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.: Использовать эту БД можно например для сохранения данных о персонажах и объектах в небольших самописных видеоиграх.