====== Формат файла .NTP ======
В файле NTP представлен список поездов из нормативной базы ГИД norbase.NN.
Каждый поезд может состоять из нескольких нормативных ниток (не меньше одной и не более 64). Нитки одного поезда отличаются между собой расписанием, т.е. набором станций в маршруте и/или временем операций прибытия/отправления по станциям. У каждой нитки может быть свой календарь, в котором заданы даты, когда эта нитка «в ходу».
Описание одного поезда в файле начинается со строки
* @I, в этой строке описываются некоторые общие свойства поезда.
Затем следуют строки описания ниток. Каждая нитка нитка описывается строками
* @N – некоторые свойства нитки;
* @R – маршрут нитки, т.е. перечень станций по маршруту в порядке их следования;
* @T – времена операций (час и минута) прибытия/отправления в каких-либо сутках без дат, представлены в виде списка пар значений [суточное время прибытия : суточное время отправления] в том же порядке, что и маршрут;
* @W – парк/путь на станции, представлены в виде списка пар номеров парка/пути, по которому совершается операция прибытия/отправления в том же порядке, что и маршрут;
* @K – строки с календарем, для одной нитки может быть несколько строк @K, т.к. одна строка описывает даты одного месяца, соответственно, если календарь охватывает несколько месяцев, то на каждый месяц заводится своя строка в порядке увеличения дат.
Существует два типа представления расписания нитки: простой и расширенный.
Простой тип предназначен для расписаний, которые имеют «нормальную» форму, для остальных ниток предназначен расширенный тип.
«Нормальную» форму имеет нитка, у которой каждая последующая операция по времени позже предыдущей и разница по времени между соседними операциями не составляет более 12-ти часов. Таким образом переход времени операций через 00:00 находится в том месте, где последующая операция имеет суточное время меньше предыдущего и разница по времени между ними не составляет более 12 часов.
Простой тип нитки:
Пример:
@I ID="4784 22382 63112 4784" N="4784"
@N K="0" S="8" D1="22.07.2014" D2="02.08.2014" T="Ряжск 2 - Еголдаево"
; Ряжск 2 Ряжск-2 СА Еголдаево
@R 22382 22383н 63112
@T 8888 0812 0816^0826 0838 8888
@K Y="2014" M="07" D="00000000000000000000011111000000"
@K Y="2014" M="08" D="11000000000000000000000000000000"
Строка @I
* Атрибут ID – внутрисистемный идентификатор (обязательное поле)
* N – номер поезда (обязательное поле)
Строка @N
* Атрибут K – не используется, зарезервирован для системы (обязательное поле)
* Атрибут S – тип источника данных (обязательное поле)
* Атрибут D1 –первая дата календаря, когда поезд в ходу (необязательное поле, если календарь не введен)
* Атрибут D2 – последняя дата календаря, когда поезд в ходу (необязательное поле, если календарь не введен)
* Атрибут T – текстовое название нитки/поезда (необязательное поле)
Строка «;» - комментарий
Строка @R – список 5-зн. кодов ЕСР станций маршрута, между кодами не менее одного пробела, символ «н» или «ч» справа или слева кода означает смену четности номера по маршруту на этой станции по прибытию или отправлению соотв. Значение номера первой операции совпадает с номером N, если не указано иное при помощи символов «н» или «ч». Четность меняется по правилу 1/2, 3/4 и т.д.
Строка @T – пары значений вида HHMM HHMM, где HH – это часы, а MM – минуты суток с лидирующими нулями. Значение 8888 – означает отсутствие данных о времени для соответствующей операции. Символ «^» между временами прибытия и отправления означает признак технической стоянки поезда на этой станции. Символ «^» после времени отправления – означает признак «отправление на неправильный путь».
Строка @K
* Атрибут Y – год календаря
* Атрибут M - месяц календаря
* Атрибут D – дни месяца, строка состоит из 32-х символов «0» или «1», каждый символ находится в позиции, соответствующей календарному дню месяца, по возрастанию слева на право. Если в каком-то месяце нет соотв. даты, то ставится 0. 32-й символ – резерв, должен быть 0. Привязка календаря производится к первой операции нитки. Пример: нитка начинается с прибытия на станцию в 23:59, отправление с этой станции в 00:10. В календаре должна стоять дата прибытия, отправление сама программа должна переносить уже на следующие сутки от даты прибытия.
Расширенный тип нитки:
Принципиальное отличие от простого типа заключается в способе описания пар времен прибытия/отправления. Описание операций на станции заключено в угловые скобки и внутри скобок идет перечисление именованных атрибутов, по аналогии с форматом атрибутов XML. Пустые скобки <> означают отсутствие данных об операциях для соответствующей станции. В одной строке пары времен могут идти друг за другом как простого типа, так и расширенного. Это зависит от того нарушается ли «нормальная» форма нитки на какой-то станции или нет и от наличия каких-то особых свойств, описание которых не предусмотрено в простом типе.
Пример
* Атрибут Pr – время прибытия в формате diff+HHMM:SS
* Атрибут Ot – время отправления в формате diff+HHMM:SS
Если на станции операция «сходу», то вместо Pr и Ot применяется один артибут Sh.
Формат diffmm+HHMM:SS - diffmm количество минут, оно дает возможность явного указания разности времени операции от предыдущей операции в большую или меньшую сторону (при помощи знака). Эта разница добавляется в случае если нитка не «нормальной» формы. SS – позволяет указать секунды времени операции, если они отличны от 00.
Пример
прибытие в 14:16 в сутках N, отправление в 15:02:30 в сутках N+1, стоянка 1502 минут 30 секунд, или 1 сутки 46 минут 30 секунд. Последующие операции высчитываются уже с учетом этого смещения.
Пример
это пример «кривой» нитки, у которой операция прибытия по времени меньше, чем операция проследования по предыдущей станции на 12 минут.
Дополнительные возможные атрибуты:
* Tech="1" - техническая стоянка
* ON="1" – отправление на неправильный путь
* pvbeg=”diffmm", pvend="diffmm" – если есть на станции стоянка для посадки/высадки пассажиров по времени отличная от «движковой» стоянки, то эти поля задают смещение времен в кол-ве минут начала и конца такой стоянки относительно времен операций прибытия/отправления.
Пример 1:
@I ID="0055 61040 19150 0055Щ" N="0055"
@N K="0" S="1" D1="25.07.2014" D2="25.07.2014" T="Баку Пасс - Москва Курская"
; Волжский Грязи-Орловские Казинка Чугун-2 Чугун-1 Липецк Сенцово
@R ч61040н 59201 59210 59230 59240 59250 59260
@T 0343 0345 1830 1830 1834 1834 1840 1840 1850 1855 1911 1911
@W 0/1 0/1 0/1 0/1 0/1 0/1 0/1
@K Y="2014" M="07" D="00000000000000000000000010000000"
Пример 2:
Завидово Редкино Тверь Дорошиха Лихославль Калашников
06130 06140 06150 06165 06210 06230
1339 1339 1349 1349 1508 1508 1528 1528 1541 1541
0/2 0/2 0/2 0/2 0/2 0/2
Пример 3:
@I ID="6001 19351 22890 6001" N="6001"
@N K="0" S="6" D1="26.07.2014" D2="26.07.2014" T="Москва Пав. - Узуново" ID_ET="541740232"
; МоскваПавл МоскваТПав Коломенско БирюлевоТв БирюлевоПс Домодедово Белые Столбы Барыбино Михнево
@R 19351 19350 19340 19330 19295 19290 19280 19270 19260
@T 8888 0413 0416 0416 0427 0428 0435 0436 0438 0439 0457 0458 0518 0519
@W 1/5 1/1 0/1 1/1 0/1 0/1 0/1 0/1 0/1
@K Y="2014" M="07" D="00000000000000000000000001000000"