- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
Assign(F, FileName);
IOResult;
Reset(F);
if IOResult = 0 then begin
for i := 0 to MaxModelNamesCount-1 do ModelKind[i] := mkVagon;
Result := True;
BlockRead(F, W, 2);
if W = OldWDim then begin // старый формат
// 20 строк пропущено
end else if W = WDim then begin // новый формат
BlockRead(F, FormatVersion, 4); // версия нового формата
if FormatVersion <= 4 then begin
BlockRead(F, EditorDate, 4);
BlockRead(F, C, 4);
LCount := C;
for i := 0 to LCount - 1 do begin
BlockReadLine(F, Lines[i], 16);
if (FormatVersion <= 2) and (Lines[i].Attr[3] and $0F = 5) then Lines[i].Attr[0] := 0
else if (Lines[i].Attr[3] and $0F = k3DObject) then ModelKind[Lines[i].IntAttr[1]] := mkStatic;
end;
if FormatVersion <= 1 then begin
ModelNamesCount := 8; // для 1й версии список жёстко задан
ModelNames[0] := 'ГЗРВ-10';
ModelNames[1] := 'ГЗРВ-10М';
ModelNames[2] := 'КТМ-5М3';
ModelNames[3] := 'ЛМ-68';
ModelNames[4] := 'ЛМ-68М';
ModelNames[5] := 'ЛМ-68ММ';
ModelNames[6] := 'ЛВС-86';
ModelNames[7] := 'ЛВС-97';
for i := 8 to MaxModelNamesCount-1 do ModelNames[i] := '';
end else if FormatVersion <= 3 then begin
ModelNamesCount := 0;
for i := 0 to 255 do begin
j := 0;
BlockRead(F, j, 1);
SetLength(ModelNames[i], j);
for j := 1 to Length(ModelNames[i]) do Read(F, byte(ModelNames[i, j]));
if ModelNames[i] <> '' then Inc(ModelNamesCount);
end;
end else begin
BlockRead(F, ModelNamesCount, 4); // кол-во моделей
for i := 0 to MaxModelNamesCount - 1 do ModelNames[i] := '';
for i := 0 to ModelNamesCount-1 do begin
BlockRead(F, k, 4); // номер считываемой модели
j := 0;
BlockRead(F, j, 1); // длина имени, не более 255
SetLength(ModelNames[k], j);
for j := 1 to Length(ModelNames[k]) do Read(F, byte(ModelNames[k, j]));
end;
end;
for i := 0 to 8 do
for j := 0 to 12 + Byte(FormatVersion >= 2) do with Routes[i, j] do begin
BlockRead(F, PCount, 2);
SetAllowedModels(Routes[i,j], 0, -1);
if FormatVersion <= 1 then begin
BS := [];
BlockRead(F, BS, 4);
AllowedModelsCount := 0;
for k := 0 to 255 do if k in BS then begin
Inc(AllowedModelsCount);
AllowedModels[k] := True;
end;
end else if FormatVersion <= 3 then begin
BlockRead(F, BS, 32);
AllowedModelsCount := 0;
for k := 0 to 255 do if k in BS then begin
Inc(AllowedModelsCount);
AllowedModels[k] := True;
end;
end else begin
BlockRead(F, AllowedModelsCount, 4);
for k := 0 to AllowedModelsCount-1 do begin
BlockRead(F, n, 4); // номер модели
AllowedModels[n] := True;
end;
end;
for k := 0 to PCount - 1 do begin
if FormatVersion >= 3 then BlockRead(F, c, 4)
else begin
c := 0;
BlockRead(F, c, 2);
end;
Points[k] := c;
end;
BlockRead(F, DefVagons, 1);
SpeedRoute := boolean(DefVagons shr 4);
DefVagons := DefVagons and $0F;
BlockRead(F, Interval, 1);
end;
end else Result := False;
end else Result := False;
Close(F);
Короче, лапша из if FormatVesion такой-то...
Обратная совместимость формата файла.
Формату уже 4 года.
7ion 05.06.2011 13:56 # −1
Где смеяться-то?
Govnocoder#0xFF 05.06.2011 13:57 # +3
bugmenot 05.06.2011 14:02 # 0
немного доставил руглиш с вагоном
SmackMyBitchUp 05.06.2011 15:33 # 0
Lure Of Chaos 05.06.2011 16:19 # +1
TarasB 05.06.2011 18:16 # +2
Govnocoder#0xFF 05.06.2011 20:23 # 0
TarasB 05.06.2011 21:16 # 0
Ну короче я просто хотел сказать, в какое говнище и портянку из непонятных условий превращается поддержка (даже в одну сторону) всей файловых форматов, когда-либо связанных с данной программой.
ctm 06.06.2011 06:45 # 0
Возможно, стоило бы отдельно реализовать чтение данных для каждой версии файлов. тот еще высер, конечно, но для поддержки и модификации кода намного проще.
wvxvw 06.06.2011 08:30 # +2
Судя по всему, даже в четвертой версии эта идея не пришла в голову автора формата, и даже если в пятой версии он исправится, остальные четыре прийдется читать вот так вот.
ctm 06.06.2011 09:52 # 0
а сейчас все-таки стоит рефакторить с учетом всего выше сказанного, а поддержку ранних версий вынести в depricated-функцию (функции).
SmackMyBitchUp 06.06.2011 10:23 # 0
ctm 06.06.2011 14:10 # 0
плюс еще в том, что при внесении изменений не придется проверять работоспособность всех старых версий.
есть идеи получше?
SmackMyBitchUp 06.06.2011 14:43 # 0
>плюс еще в том, что при внесении изменений не придется проверять работоспособность всех старых версий.
ctm 07.06.2011 06:51 # 0
bugmenot 06.06.2011 14:37 # +1
SmackMyBitchUp 06.06.2011 14:40 # 0
wvxvw 06.06.2011 15:03 # 0
bugmenot 06.06.2011 15:58 # 0
TarasB 06.06.2011 16:13 # 0
Про нормальный формат я знаю. Например, можно в начале каждой записи записывать её размер. И если при чтении из файла размер больше того, что знает программа, то проигнорировать лишнее, если меньше, то добить недостающее нулями. Это позволило бы очень долго дополнять формат новыми полями, не меняя код загрузки и сохранения вообще.
Идея изменить формат на нормальный висит уже давно. Вместе с идеей обновить движок полностью, не ковыряясь в наследстве времён 3 курса. Уже год, как я каждый месяц вклиниваю какое-нибудь изменение, делая это в лоб, не думая об архитектуре (уже не до неё потому что), обещая больше это не трогать и вскоре переписать нафиг.
SmackMyBitchUp 06.06.2011 17:18 # 0
ctm 07.06.2011 06:55 # 0
именно это я вам и предлагаю
TarasB 07.06.2011 09:01 # 0
Короче, полгода жизни я угроблю точно.
ctm 07.06.2011 10:02 # 0
ну и понятно, что ничего не делать - проще сейчас. а что потом - ну вам виднее.
gegMOPO4 08.06.2011 14:53 # −2
TarasB 08.06.2011 14:56 # 0
А модели там и так текстовые, кстати. Размер при этом поражает. Довольно хорошо выглядящая модель вагона в архиве занимает максимум 10КИЛОбайт, и это нормально.
gegMOPO4 08.06.2011 15:20 # 0
В итоге выйдет меньше.
ctm 08.06.2011 15:24 # +1
в любом случае вопрос в критичности размера данных.
gegMOPO4 08.06.2011 17:34 # −1
TarasB 09.06.2011 09:06 # +1
Я вчера то же самое хотел написать из-под гостя (под хромом не логинился), не пустило, зато капча была 9999, не вру!
gegMOPO4 09.06.2011 12:27 # 0
ctm 09.06.2011 13:21 # 0
Никуда не денешься - и изобретай тут велосипеды:(
я наступил на такие же грабли лет 7-8 назад - описал свои действия - как позже оказалось, все делал не зря.
gegMOPO4 10.06.2011 20:40 # 0
ctm 08.06.2011 15:11 # −2
у себя подобную проблему решил написанием довольно простого контейнера данных - древовидная структура нодов с доступом по строковому ключу, в каждом из них хранится массив элементов (у меня был 2д массив, но это частности). элемент может быть int, double, string, data (бинарные данные). формат файла после этого больше не менялся, менялась только спецификация, в плюсе имеем стандарт, контроль за ошибками (был случай по почте файл пересылали килобайт 50 размера, а он испоганился), удобство работы (если нормально классы сделать), маленький размер данных (можно zlib поюзать). в минусе - день потраченного времени.
wvxvw 08.06.2011 22:59 # 0
gegMOPO4 08.06.2011 23:23 # 0
wvxvw 09.06.2011 00:22 # 0
Как бы я не вижу никаких причин не создавать свои форматы, если этого требует ситуация. Это все равно что не делать новые редакторы кода потому что есть emacs. :) (скоро 24-я верся, релиз, кстати).
TarasB 09.06.2011 09:05 # 0
А кто это делает, кстати? Я бы с удовольствием затащил их в свой подвал для вивисекторских экспериментов.
После того, как я два дня убил на то, чтобы найти все кодеки и конвертёры для одного видео (я хотел его склеить из 2 файлов в 1 и перевести в другой формат), я ненавижу тех, кто плодит эти форматы.
wvxvw 09.06.2011 09:36 # −1
А так, Википедия говорит, что знает вот такие: http://en.wikipedia.org/wiki/List_of_codecs :)
guest 16.06.2011 03:22 # +1
А ещё и тех, кто из года в год меняет ГОСТы оформления документов просто от того, что-бы его не выгнали с работы за бездействие, заменяя жирные буквы большими, меняя отступ от края страницы на миллиметр и тд - без причин.
gegMOPO4 09.06.2011 12:51 # 0
Разумеется, на самом верхнем уровне мы принимаем стратегические решения, какие из стандартных форматов использовать, как их комбинировать. это уже зависит от нашего приложения и полностью наше.
ctm 09.06.2011 13:32 # 0
wvxvw 10.06.2011 03:07 # 0
Типичный пример: нужно как-то передавать данные из флеша на сервер и обратно. Казалось бы банально, но когда это вырастает до десятковы тысячь запросов в час, то начинают чесать репу о том, что в мемкешед не влезает, мемкешед не успевает и т.п. XML - долго генерится и долго парсится. Вот так вот. JSON - чуть лучше, но это нестандартная хрень, особенно в том, как оно работает с алиасами в строках (типа \r например). AMF - формат построен с поддержкой дурацкой фичи, которая не нужна никому - кроме того, что хранятся описания классов, в таблицах символов хранятся не хеши строк, а строки, как есть. Пробовал переписывать таблицы символов, долго. Protobuf - никому не нужные во флеше long / ulong. Изза которых нужно тянуть левую библиотеку для длинной математики + реализация формата в рекоммендуемом Гуглом проекте ниже плинтуса. Писатель не в курсе был про ByteArray.endian свойство, поэтому разворачивал все 4-байтовые последовательности вручную. В итоге пришлось писать самим. Это даже не гордость никакая, просто ничто другое нормально не работало. Kонечно, можно было и даже тем же XML воспользоваться, но по деньгам, это 2К долларов в месяц убытков на ровном месте (аренда доп. серверов у Амазона).
istem 10.06.2011 04:42 # 0
gegMOPO4 10.06.2011 20:49 # 0
В любом случае у текстового представления будут преимущества (если это не большой блоб, упакованный специальным алгоритмом, вроде картинок, музыки, видео).
wvxvw 11.06.2011 11:54 # 0
Что до стандартизации алиасов, то, например ECMAScript считает, что \v (вертикальная табуляция) существует, а JSON так не считает. И, собственно поэтому утверждение о том, что JSON и ECMAScript совместимы не верно. Хотя авторы колотят себя пяткой в грудь :)
gegMOPO4 15.06.2011 23:17 # 0
wvxvw 15.06.2011 23:32 # 0
Нет, RFC - это не стандарт. ECMA - тоже не стандарт, стандарты это ISO / ANSI и им подобные. ECMA свои произведения утверждает в качестве стандартов. JSON - это пока что на уровне инициативы, но никак не стандартизирован. Кроме того, заявление его авторов о полном соответсвии синтаксиса с ECMAScript какой бы то ни было версии - это всего лишь выдумка его авторов. Валидное выражение ECMAScript "foo\vbar" вызывает ошибку в любом JSON парсере правильно реализующем формат. Кроме того, этот формат не гарантирует полного соответсвия полученной и отправленной информации - поэтому, использовать его там, где это критически необходимо (например места, где нужно оперировать контрольными сумами) не возможно.
gegMOPO4 16.06.2011 00:00 # 0
KATAJIU3ATOP 26.06.2011 17:54 # 0
dosGovno 26.06.2011 20:08 # 0
guest8 09.04.2019 10:53 # −999