У меня есть внешний файл ksy, специально разработанный для хранения «объекта» в ksy, он содержит нечто, называемое coffee
, где coffee
имеет атрибуты identifier
, length_in_bytes
и flavor
.
Я импортирую coffee
в мой основной файл ksy и wi sh, чтобы использовать значение length_in_bytes
в качестве атрибута size
для другого "объекта", считываемого через seq
.
. код ниже объяснит более кратко, что происходит:
testfile.ksy
meta:
id: testfile
imports:
- drinks
title: testfile
# additional information here defining file-extension, endian and encoding
# additional information here defining doc
seq:
- id: drinksset
type: drinks
repeat: expr
repeat-expr: 2
types:
drinks:
seq:
- id: drinks_listings
type: coffee
size: coffee.length_in_bytes
drinks.ksy
meta:
id: coffee
title: coffee
# additional information here defining file-extension encoding & endian
# additional information here defining doc
types:
coffee:
seq:
- id: identifier
type: u4
- id: length_in_bytes
type: u4
- id: flavor
type: u4
Моя проблема связана со строкой:
size: coffee.length_in_bytes
- Я знаю это, потому что удаление этой строки позволяет файлу ksy успешно прочитать файл тестовых данных.
- Когда у меня есть информация о типах кофе внутри
testfile.ksy
, возникает без проблем , только когда тип coffee
импортируется в отдельный файл, который имеет проблемы. - Я могу читать другие атрибуты, которые я могу определить в
coffee.ksy
без проблем, например, объявив пользовательский тип данных с именем u4test
с type: u4
и сославшись на него вместо u4
для flavor
отлично работает.
Я полагаю, что это может быть проблема с печатанием Kaitai, и попробовал следующее:
size: coffee::length_in_bytes
size: coffee.as<coffee>.length_in_bytes
size: coffee.as<u4>.length_in_bytes
size: _parent.coffee.as<coffee>.length_in_bytes
size: _parent.coffee.as<u4>.length_in_bytes
Но ничего не помогло.
См. Kaitai.io
Спасибо, понимание ценится.