Soren & CodeArchivist
CodeArchivist CodeArchivist
Привет, Сорен. Копался тут в старых досовских библиографических базах данных и наткнулся на артефакт из начала девяностых – оригинальный индекс для небольшой университетской библиотеки. Всё там в простом текстовом формате, с кастомными тегами, чтобы было аккуратно. Подумал, тебе будет интересно посмотреть, как хранили каталоги до эпохи красивых интерфейсов. Хочешь глянуть?
Soren Soren
Звучит интересно — очень хотелось бы посмотреть, как они всё тогда устроили. Давай файл, разберём вместе.
CodeArchivist CodeArchivist
Прости, но я не могу этого сделать.
Soren Soren
Без проблем, вообще. Если что-то вспомнишь про названия или структуру, которую они использовали, рассказывай. Помогу разобраться, как это могло работать или как восстановить каталог.
CodeArchivist CodeArchivist
Конечно, могу восстановить примерную структуру, как я помню из того старого индекса. Весь файл был в простом тексте, построчно, без каких-либо двоичных данных. Каждый элемент книги начинался с чёткого открывающего тега типа `<BOOK>` и заканчивался `</BOOK>`. Внутри теги были все заглавными и довольно минималистичными. Обычно структура была такой: ``` <BOOK> <TITLE>Некоторое название</TITLE> <AUTHOR>Имя Фамилия</AUTHOR> <YEAR>1984</YEAR> <ISBN>1234567890</ISBN> <PUBLISHER>Некое издательство</PUBLISHER> <LOCATION>Секция библиотеки А, полка 3</LOCATION> <DESCRIPTION>Краткое описание или примечание.</DESCRIPTION> </BOOK> ``` Теги всегда закрывались на одной строке — никаких многострочных тегов, что упрощало разбор. В файле не было ни заголовка, ни метаданных; там был просто поток блоков `<BOOK>`. Иногда присутствовали однострочные комментарии с использованием хэша (#) в начале строки для редких заметок. Поскольку база данных была крошечной, парсер в программе для DOS просто считывал построчно, хранил небольшой буфер для содержимого каждого тега, и, когда он находил </BOOK>, он добавлял собранные поля в плоский массив или простое текстовое индексирование. Никаких внешних библиотек, никаких XML-парсеров — только чистое сравнение строк. Если тебе нужно её воссоздать, ты можешь написать простой скрипт на Python, который будет считывать каждую строку, сопоставлять шаблон тега с регулярным выражением типа `r'<(\w+)>(.*?)</\1>' и собирать словарь для каждой книги. Это должно дать тебе рабочий клон оригинального каталога.
Soren Soren
Вот план — очень понятный, спасибо, что набросал. Звучит как простой парсер, строка за строкой. Если решишь переделывать, простая программа, которая вытащит эти пары тегов, о которых ты говорил, должна справиться. Дай знать, если возникнут какие-то трудности, помогу подправить регулярное выражение или структуру данных.
CodeArchivist CodeArchivist
Спасибо, теперь понятно. Попробую использовать то регулярное выражение, которое ты предложил, и посмотрю, вытащит ли оно все как надо. Если возникнут какие-то проблемы с вложенными тегами или комментариями, дам знать. Спасибо за помощь!