История повреждена, некоторые данные утеряны.

Больше
15 года 2 нед. назад - 15 года 2 нед. назад #41 от cy6
Rapid D писал(а):

И даже 4 подряд $FF встречаются часто? Вроде бы не должно

Встречаются пять подряд. Как я уже говорила, в конце поля Body. Иногда встречается не $FF, а $FE, и тогда детектится -2 вместо -1, соответственно.

Я сделала алгоритм, как задумывала с самого начала, чтобы детектить Chunk по всем известным полям фиксированной длинны. Тесты показывают отличные результаты. Фактически, я добилась того, что длина поля Body теперь вычисляемая и проверяемая. Длина поля Extra-Info принята за 12, хотя и в документации нет подобных указаний, но мне другая длина этого поля в файлах (включая старый &RQ) не встречалась. Также, возможно считывание записи даже при затертом поле What или Event-Time (но не обоих сразу).

Ключевой алгоритм детекта полей Chunk прилагаю. Думаю, скоро будет новый бета-релиз. :)

Вложение ChunkDetect.zip не найдено

Вложения:
Последнее редактирование: 15 года 2 нед. назад пользователем cy6.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 2 нед. назад - 15 года 2 нед. назад #42 от Rapid D
cy6 писал(а):

... Длина поля Extra-Info принята за 12, хотя и в документации нет подобных указаний, но мне другая длина этого поля в файлах (включая старый &RQ) не встречалась...

Я в extra-info что-то добавлял. Потому лучше жёстко его не считать.
Например добавил UID (если он не числовой, например в AIM, MRA, XMPP).
Вечером напишу поподробней, что как добавлял
Последнее редактирование: 15 года 2 нед. назад пользователем Rapid D.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 2 нед. назад #43 от Rapid D
cy6 писал(а):

...
Ключевой алгоритм детекта полей Chunk прилагаю. Думаю, скоро будет новый бета-релиз. :)

Вложение ChunkDetect.zip не найдено

Ну что за привычка использовать глобальные переменные? :(

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 2 нед. назад - 15 года 2 нед. назад #44 от cy6
Rapid D писал(а):

Ну что за привычка использовать глобальные переменные? :(


Это не глобальные, снова. Я же интерфейс класса выкладывала. :blush:
THistFile = class (TFileIO)
  private
    fResReason: Integer;
    fChunkFixBuff: PByte;
    fFields: Word;
    fIsChunkLoaded: Boolean;
    fWhat: Cardinal;
    fEventType: Byte;
    fSenderUIN: Cardinal;
    fEventTime: TDateTime;
    fExtraInfo: PByte;
    fExtraInfoLen: Cardinal;
    fBody: AnsiString;
    fBodyLen: Cardinal;
  protected
    function getDecriptedBody: string;
    function getResReasonDesc: string;
  public
    constructor Create;
    destructor Destroy; override;
    function ChunkRead: Boolean;
    function ChunkReadRepair: Boolean;
    function ChunkWrite(src: THistFile): Boolean;
    function ChunkScan1(var Offs: Cardinal; IsSave: Boolean): Boolean;
    function ChunkDetectFields(IsSave: Boolean): Boolean;
    property ErrorReason: Integer read fResReason;
    property What: Cardinal read fWhat;
    property EventType: Byte read fEventType;
    property SenderUIN: Cardinal read fSenderUIN;
    property EventTime: TDateTime read fEventTime;
    property Body: string read getDecriptedBody;
  end;

ChunkRead, ChunkScan1 используются для строгого чтения хистори при проверке, для ремонта будут ChunkReadRepair и ChunkScan2, соответственно.
Все они используют ChunkDetectFields. В самой функции (ChunkDetectFields) я не стала использовать специфический тип данных Delphi - set, воспользовалась более привычной установкой битов, для обозначения опознанного поля.

fChunkFixBuff считывается в ChunkRead и ChunkScan, блок из 21 байта (предполагаемые поля с What по Extra-Len). ChunkRead опознает и считывает запись, ChunkScan находит следующую запись, чтобы определить длину первой, в соответствии с рекомендованным алгоритмом.
Последнее редактирование: 15 года 2 нед. назад пользователем cy6.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 1 нед. назад - 15 года 1 нед. назад #45 от cy6
Update по программке ремонта истории.

Интерфейс улучшила и доделала. История, выгоняемая в текстовики теперь читабельна, раскодируются UTF-8, UTF-16 и UTF-16 BE.

Осталось только аварийное чтение (проверочное строгое готово), надеюсь Rapid D. еще выложит обещанные советы, и новый уже официальный бета билд будет готов. :)

16.12.2009:
Все по моей программе переносится в заведенную тему.
rnq.ru/component/option,com_kunena/Itemi...ew/catid,7/id,36335/
Последнее редактирование: 15 года 1 нед. назад пользователем cy6.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: bassvazoozaDelphukdekTiMeTraSheRLaDyStRaNGed0CeNTRapid D
Время создания страницы: 0.313 секунд
Работает на Kunena форум