Как прочитать составной набор данных H5?C++

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

Сообщение Anonymous »

У меня есть файл H5 с составными наборами данных. Они содержат смесь целых и двойных чисел. Сейчас я читаю один набор данных таким образом:

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

#include "H5Cpp.h"
#include 

struct myData {
int int1;
double d1, d2, d3, d4, d5, d6;
int int2;
};

int main(){
H5::H5File file;
// set file_path to the file and record_path to the dataset
file.openFile(file_path.c_str(), H5F_ACC_RDONLY);
H5::DataSet dataset = file.openDataSet(record_path.c_str());
H5::DataSpace dataspace = dataset.getSpace();
hsize_t dims[2];
dataspace.getSimpleExtentDims(dims, NULL);
std::vector data(dims[0]); // this set is not an array directly *dims[1]);
dataset.read(data.data(), dataset.getDataType());
/* ... work with the vector data as need be ... */
return 0;
}
Я хочу создать универсальный способ чтения составных наборов данных. Я могу определить количество и тип каждой отдельной записи в составном наборе данных с помощью этого кода:

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

H5T_class_t type_class = datatype.getClass();
if (type_class == H5T_COMPOUND) {
H5::CompType compType = dataset.getCompType();
int numMembers = compType.getNmembers();
for (int i = 0; i < numMembers; ++i) {
std::string name = compType.getMemberName(i);
H5::DataType mType = compType.getMemberDataType(i);
H5T_class_t mClass = mType.getClass();
}
}
В идеале я мог бы динамически создавать структуру myData во время выполнения, чтобы вектор данных был правильным. Я попробовал использовать std::variant в структуре. Варианты не получили правильные значения от функции чтения. Большинство значений были value_by_execption. std::tuple также не удалось правильно заполнить. Этот пост в группе hd5, похоже, соответствует тому, что я хочу, но дан совет: «Создавайте тот тип, который хотите читать». Это та часть, которую я не могу сделать правильно.
Каков правильный способ динамического построения контейнера для чтения общего набора данных H5T_COMPOUND?

Подробнее здесь: https://stackoverflow.com/questions/791 ... nd-dataset
Ответить

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

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

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

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

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