Я читаю в наборах данных из файла H5 в Microsoft Visual C ++ 2008. Все отлично работает для данных типа int и double, но я сталкиваюсь с проблемами, когда сталкиваюсь со строками. В файле H5 у меня есть 18 строк с фиксированной длиной 24. Мой код выглядит следующим образом;
StrType strdatatype(PredType::C_S1, 24);
char *buffer1[18];
DataSet datasetCurveNames = riskFactorsH5.openDataSet("/gstrCurveNames");
datasetCurveNames.read(&buffer1, strdatatype);
При выполнении buffer1 заполняется плохими указателями. В качестве альтернативы я попытался использовать H5T_VARIABLE для управления строками переменной длины с модификацией:
StrType strdatatype(PredType::C_S1, H5T_VARIABLE);
Это также не удается. Если кто-то может пролить свет на эту проблему, это будет высоко ценится.
Ура,
Лукас
HDF5 C ++ API ужасно недокументирован. Вот как я читаю в строках из набора данных. Я понял это только с помощью IDE с дополнением кода:
using namespace H5;
std::string field_name("name of the field");
StrType datatype(0, H5T_VARIABLE);
DataSpace dataspace(H5S_SCALAR);
DataSet datset = group.openDataSet(field_name);
std::string field_value;
datset.read(field_value, datatype, dataspace);
Вам нужно выделить память для полных строк, библиотека не сделает это за вас. Вы должны заменить
char *buffer1[18];
от
char buffer1[18][24];
а также
datasetCurveNames.read(&buffer1, strdatatype);
должно быть
datasetCurveNames.read(buffer1, strdatatype);
(нет &
)