appolo440
Честно сказать я не совсем понял решение. Если честно. Как я это вижу? Открывается файл, ищем весь текст до первого вхождения (<code=“524426745”>), находим, значит выводим строку, раз строка найдена, выводим все остальные строки до тех пор, пока не встретим второе вхождение (</code=“524426745”>) .
Ты когда файл прочитаешь через f.read(), получишь текст весь, который подашь в функцию, которая разделяет его на записи. И потом, когда уже разделишь его на записи, ты возьмёшь первую из них.
Там я дописал разбор, теперь записи сразу транслируются в кортежи.
appolo440
Может быть с точки зрения “чистого” программирования это и выглядит нагромождением, но ведь работает .
У
Romissevd оно берёт только определённую запись (с определённым номером) и больше ничего не делает с ней. Если тебе понадобится запись с другим номером, то этот код ты уже не применишь, потому что в нём номер зашит (надо менять код). Если код надо менять, то он фиговым считается, так как хороший код параметризован - ты просто меняешь вводный параметр и код без каких-либо изменений применим к другим записям. Чем больше код параметризован, тем он лучше. В данном случае код должен быть параметризован ещё и по источнику данных. Но у него в код зашито ещё и то, что данные берутся только из файла. Значит, если они придут по сети (через соединение) или по почте, то ты не сможешь эти данные сразу подать в код, потому что он требует именно файл, сначала ты должен будешь сохранять данные на диск, а потом этот файл подавать, но данные на диск может быть запрещено сохранять или на нём может закончиться место. В хорошем коде данные принято передавать прямо из оперативной памяти (она быстрее работает, чем диски, и меньше изнашивается). Ну, и самая главная параметризация, которая у него отсутствует, - это номер записи по счёту. Он не может выбрать третью запись из пяти, например, и с ней работать, потому что он вообще их не считает. Он не может выбрать 3, 10 и 115 записи, потому что сами записи в его потоке не разделяются.
А в моём коде косяк только в том, что текст нужно целиком подавать, а он может быть огромным (на гигабайты). Но это можно поменять хотя бы потом, и то, если это вообще понадобится. Там легко поменять это.
Ну, и из дописанного видно, что у меня подаётся просто череда записей, а на выходе получается череда кортежей, в которые уже всё извлечено из этих записей. То есть с этим можно работать уже, брать значения, менять что-то и обратно сформировывать и выводить.
Было вот так:
<code="524426745">
<id=1>
<id=2>
</code="524426745">
Стало вот так:
('524426745', ('1', '2'))