|
|
|
| Привет!
Столкнулся с такой проблемой: есть файлы баз данных в формате dbase IV. С dbf файлами я справился они читаются на ура. Но как прочитать файлы dbt(мемо - поля)? Пробовал разобраться по спецификации структуры файла... но у впервые увидев ЭТО трудно понять что к чему...
Открыл HEX и сравниваю таблицы кодов.
Разбирался я по этому документу: http://www.clicketyclick.dk/databases/xbase/format/dbf.html
http://www.clicketyclick.dk/databases/xbase/format/dbt.html
0 | Number of next | ^
1 | available block | |
2 | for appending data | Header
3 | (binary) | |
|-----------------------| |
4 | ( Reserved ) | |
| Size of blocks *1| |
| | |
7 | | |
|-----------------------| |
8 | DBF file name | |
| without extention | |
: : |
15 | | |
|-----------------------| |
16 | Reserved (00h) | |
|-----------------------| |
17 | ( Reserved ) | |
18 | | |
19 | | |
|-----------------------| |
20 | Block length in bytes | |
21 | *4| |
|-----------------------| |
|
Как прочитать длину блока по этой схеме?
В хексредакторе у меня по этим адресам стоят нули.. но ведь файлы сделаны на dbase IV, а по спецификации там должно быть это записано...
Вот как я пытался хоть чтото вытащить из заголовка файла(но он пуст, хотя даные есть(что видно из картинки.. там прилично текста!..)))
$handle = fopen($memoname, "r");
if (!$handle) { echo "Cannot read DBT file"; exit; }
$filesize = filesize($memoname);
echo "filesize memo: $filesize";
$this->_memos = fread ($handle, $filesize);
$arrHeaderHex3 = array ();
for($i=0; $i<32; $i++){
$arrHeaderHex3[$i] = str_pad(dechex(ord($this->_memos[$i]) ), 2, "0", STR_PAD_LEFT);
}
echo "BlockLength:".hexdec($arrHeaderHex3[21].$arrHeaderHex3[20])."<br>";//не знаю почему 21, а потом 20, но взял из рабочего кода ... читался дбф файл
fclose ($handle);
|
Помогите кто чем может) | |
|
|