Разбор двоичного файла со смешанной структурой - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно проанализировать двоичный файл ABIF в PHP.Есть структура: https://projects.nfstc.org/workshops/resources/articles/ABIF_File_Format.pdf

Файл состоит из трех логических частей.Заголовок фиксируется на первых 128 байтах, остальные две части могут быть где угодно, это означает даже между некоторыми текстовыми или XML-данными.Как разобрать эти две части?Любые идеи?

Я нашел много решений, как анализировать ABIF на других языках: Python, C, C ++, VB, Perl, JavaScript, но ничего о PHP.Пример в JS: https://github.com/eamitchell/ab1ToJSON

Пример файла: https://sourceforge.net/p/seqmanager/code-0/1/tree//cgi-bin/ABIveiw/test.ab1

$filename = 'files/2p_Pro_1.ab1';
$handle = fopen($filename, 'rb');
$size = filesize ($filename);
$data = fread($handle, 6);
$data = unpack('a4header/nver', $data);
$result['head'] = $data;

$data = fread($handle, 28);
$data = unpack('a4name/Nnumber/nelementtype/nelementsize/Nnumelements/Ndatasize/Ndataoffset/Ndatahandle', $data);
$result['dir'] = $data;

var_dump($result);

Возвращает:

Array ( 
    [head] => Array ( 
        [header] => ABIF 
        [ver] => 101 
    ) 
    [dir] => Array ( 
        [name] => tdir 
        [number] => 1
        [elementtype] => 1023 
        [elementsize] => 28 
        [numelements] => 165 
        [datasize] => 4928 
        [dataoffset] => 245963
        [datahandle] => 0
    )
)

1 Ответ

0 голосов
/ 27 мая 2019

dataoffset сообщает, где начинается каталог. Каждая запись в каталоге имеет другое поле dataoffset, в котором указывается, где начинаются ее данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...