Как мне прочитать атрибут HDF5, который может быть одним из двух разных типов данных, используя язык GO?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне прочитать атрибут HDF5, который может быть одним из двух разных типов данных, используя язык GO?

Сообщение Anonymous »

Я переношу существующее приложение C++ на GO в рамках ознакомительного проекта. В рамках этого мне нужно прочитать два атрибута набора данных, которые в некоторых файлах хранятся как двойные, а в некоторых — как числа с плавающей запятой. Код C++, который я использую для решения этой проблемы, выглядит следующим образом (мы используем libhdf5-cpp-100 в Debian Linux).

Код: Выделить всё

const auto att = dataSet.openAttribute(attributeName);
if (att.getDataType() == H5::PredType::NATIVE_DOUBLE) {
att.read(att.getDataType(), &attributeValue);
}
else if (att.getDataType() == H5::PredType::NATIVE_FLOAT) {
float temp = 0.F;
att.read(att.getDataType(), &temp);
attributeValue = static_cast(temp);
}
else {
// we throw an exception indicating we don't support the type
}
Моя проблема в том, что мне трудно написать эквивалент в GO. (Я использую пакет «gonum.org/v1/hdf5».) Метод чтения кажется достаточно простым:

Код: Выделить всё

func (s *Attribute) Read(data interface{}, dtype *Datatype) error
Но я изо всех сил пытаюсь определить, что передать в качестве типа данных, поскольку тип атрибута, похоже, не имеет метода GetDataType. Самое близкое, что я вижу, это следующее:

Код: Выделить всё

func (s *Attribute) GetType() Identifier
Но это возвращает не тип данных, а идентификатор. Я попробовал следующее сравнение, предполагая, что по идентификатору я могу определить тип данных:

Код: Выделить всё

if attr.GetType().ID() == hdf5.T_NATIVE_DOUBLE.ID() {
// handle as a double
}
но это не работает. Идентификатор, возвращаемый функцией GetType(), не совпадает с идентификатором ни для типа double, ни для числа с плавающей точкой.

Я просмотрел онлайн-документацию по адресу https://godoc.org/gonum.org/v1/hdf5, но не смог найти решение своей проблемы. (Или любой пример чтения атрибутов HDF5 с использованием GO.)

Кому-нибудь удалось сделать что-то подобное? Или большинство примеров просто предполагают тип, а не запрашивают его?

Подробнее здесь: https://stackoverflow.com/questions/548 ... data-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»