1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Любая версия [PHP] BinReader

Тема в разделе 'PW Web', создана пользователем salitypw, 27 окт 2014.

  1. TopicStarter Overlay

    salitypw Программист Пользователи

    Сообщения:
    673
    Лайки:
    458
    Пол:
    Мужской
    Репутация:
    8
    Команда:
    Easy Game Protection
    Страна:
    Japan Japan
    Как можно понять из названия темы - предназначена для работы с data файлами. А конкретнее - их чтение.
    Может быть полезна php разработчиками, если , к примеру, необходимо спарсить какой-то data файл в базу.

    Список методов:
    PHP:
    offset
    readByte
    readInt16
    readUInt16
    readUInt16_be
    readUInt16_le
    readInt32
    readUInt32
    readUInt32_be
    readUInt32_le
    intToFloat16
    UIntToFloat16
    intToFloat32
    UIntToFloat32
    readFloat16
    readFloat32
    readFloat64
    floatToInt16
    floatToUInt16
    floatToInt32
    floatToUInt32
    readChars8
    readChars16
    readStruct
    Конструктор принимает массив с 2 элементами.
    PHP:
    array('путь_к_data_файлу''имя_папки_со_структурами');
    Второй элемент не обязателен.

    К примеру, узнать версию elements.data можно так:
    PHP:
    <?php
    $reader 
    = new BinReader(array('elements.data'));
    echo 
    $reader->readUInt16();
    Названия методов, думаю, интуитивно понятные.

    Основная полезность библиотеки в том, что для data файлов можно написать структуры и далее для чтения файла можно просто указывать нужную структуру, вызывая метод readStruct(), и все.

    Простой пример. Прочитаем первые пару значений elements.data , читая файл по структуре.
    Узнаем версию элика и количество записей в первом листе:
    Чтитаем: UInt16 (2 байта), потом идет смещение на 6 байт, и потом количество записей в первом листе Int32 (4 байта)

    [​IMG] [​IMG]

    В качестве параметра методу readStruct() можно передавать не только саму структуру, но и имя файла, в котором она описана.
    Как можно заметить, структура - это обычный ассоциативный массив ключ => значение, где значение - тип данных, который нужно считать, а ключ - ключ в массиве с результатом.

    В значении указывается имя метода без префикса read . То есть, если целое знаковое число (4 байта == 32 бита) у нас считывается методом readInt32(), то в структуре в значении нам надо написать Int32 .

    Через точку с запятой можно передавать параметры для вызываемых методов. К примеру, если нам надо считать 10 символов по 1 байту, то мы реализуем это так:
    PHP:
    $struct = array(
                
    'str' => 'Chars8;10',
            );
       
            
    var_dump($reader->readStruct($struct));
    Так же при описании структуры нам доступны некоторые директивы (перед директивой ставится двоеточие)

    1) :offset=количество_байт - предназначено для произведения смещения при чтении файла по структуре.
    Пример использования можно увидеть на первом скрине.

    2) :unset=ключ - удаляет элемент результирующего массива по его ключу.
    Пример использования:
    [​IMG] [​IMG]
    3) ':struct=ключ' => '/* Тут массив со структурой или имя файла со структурой */'
    Эта директива предназначена для чтения структуры в структуре. При чтении достаточно большого файла и сложного файла на много удобнее будет разбить всю структуру на меньшие под структуры. К примеру - структура для чтения elements.data можно реализовать как структуру для чтения структур листов.

    4) ':cycle=параметр_1;параметр_2' => '/* Тут массив со структурой или имя файла со структурой */' - Предназначено для чтения определенной структуры заданное количество раз.
    параметр_1 = Количество итераций. Вместо количества итераций можно указать ключ элемента результирующего массив, тогда количество итераций будет взято с этого элемента.
    К примеру - можно использовать для чтения листов elements.data .
    Пример использования:
    [​IMG] [​IMG]

    5) Конструкция: [:field_val=ключ] - предназначена для использования значений предыдущих элементов результирующего массива в текущем элементе.
    Пример:
    [​IMG] [​IMG]

    Как то так. Если будут вопросы, то пишите в эту тему. В архиве вместе с самой библиотекой приложил готовый пример парсинга world_targets.sev
    Результат парсинга world_targets.sev :
    [​IMG]

    Вложения:

    Последнее редактирование: 28 окт 2014
    pre1144, Dimkaa, Nooo и 15 другим нравится это.
  2. pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.409
    Лайки:
    1.406
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    вот, побольше бы подобных чисто оформленных весьма полезных для ознакомления статеек
    salitypw нравится это.
Черновик сохранён Черновик удалён

Поделиться этой страницей