我需要在PHP中解析二进制ABIF文件。结构如下: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
)
)
答案 0 :(得分:0)
dataoffset
告诉目录从哪里开始。每个目录条目都有另一个dataoffset
字段,用于指示其数据从何处开始。