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

Модуль time сообщит вам текущую дату, используя time.time().

Это в секундах. Чтобы добавить 30 дней, вы добавляете 30 дней на секунды.

>>> import time
>>> current_date = time.time()
>>> time.ctime(current_date)
'Mon Mar 04 11:45:20 2019'
>>> plus30days = current_date + 30 * 24 * 60 * 60
>>> time.ctime(plus30days)
'Wed Apr 03 12:45:20 2019'

Существует разница в часах, потому что в моем часовом поясе часы идут вперед в течение следующих 30 дней.

7
задан Alex 28 April 2009 в 20:00
поделиться

6 ответов

Когда вы впервые сталкиваетесь со ссылкой, просто сохраните ее как ссылку. Затем вы можете поместить символ, или ссылку, или что-либо еще в список «ссылок, которые необходимо разрешить позже».

Когда файл будет создан, просмотрите те, у которых есть ссылки, и разрешите их.

13
ответ дан 6 December 2019 в 08:45
поделиться

Well, you asked for a third option. You don't have to use XML, but if you follow the following structure, it would be very simple to use a SAX parser to build your data structure.

At any rate, instead of referencing a teammate, each character references a team (Blue team in this case). This will decouple the circular reference issue. Just make sure you list the teams before the characters.

<team>Blue</team>

<character>
    <name>Sidekick</name>
    <X>12</X>
    <Y>0</Y>
    <teamref>Blue</teamref>
</character>

<character>
    <name>Sidekick</name>
    <X>10</X>
    <Y>50</Y>
    <teamref>Blue</teamref>
</character>
5
ответ дан 6 December 2019 в 08:45
поделиться

Лично я бы пошел с б). Разделение вашего кода на классы Parser и Validator, которые работают с одинаковой структурой данных. Парсер будет читать и анализировать файл, заполняя структуру данных и сохраняя любые ссылки на объекты как их текстовые имена, оставляя пока настоящий указатель нулевым в вашей структуре.

Когда вы закончите загрузку файлов, используйте класс Validator для проверки и разрешения любых ссылок, заполняя «настоящие» указатели. Возможно, вы захотите подумать о том, как структурировать ваши данные, чтобы сделать этот поиск красивым и быстрым.

2
ответ дан 6 December 2019 в 08:45
поделиться

Уилл сказал именно то, что я собирался написать. Просто сохраните список или что-то с нерешенными ссылками.

И не забудьте выдать ошибку, если есть неразрешенные ссылки, когда вы закончите читать файл = P

1
ответ дан 6 December 2019 в 08:45
поделиться

Вместо сохранения объекта Character на карте, сохраните прокси-сервер для Character. Прокси будет содержать указатель на фактический объект Character, когда объект загружен. Тип Character :: teammate будет изменен на этот тип прокси. Когда вы читаете ссылку, которой еще нет на вашей карте, вы создаете прокси и используете прокси. Когда вы загружаете персонажа, у которого уже есть пустой прокси на карте, заполните его новым загруженным персонажем. Вы также можете добавить счетчик, чтобы отслеживать количество пустых прокси на карте, чтобы вы знали, когда все ссылочные символы были загружены.

0
ответ дан 6 December 2019 в 08:45
поделиться

One option would be to reverse the obligation. The Map is responsible for filling in the reference

template<T> class SymbolMap // I never could rememeber C++ template syntax
{
   ...

   /// fill in target with thing name
   /// if no name yet, add it to the list of thing that will be name
   void Set(T& target, std::string name);

   /// define name as target
   /// go back and fill in anything that needs to be name
   void Define(T target, std::string name);

   /// make sure everything is resolved
   ~SymbolMap()
}

that won't interact well with value/moving semantics but I suspect that not much will.

0
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: