2016-07-19 19 views
1

I HDF5 Daten erhalten Dateien mit dem folgenden DatentypWie Array-Größe von HDF5 Datentyp in C/C++

HDF5 "testFile.be01" { 
GROUP "/" { 
    DATATYPE "DRx3" H5T_COMPOUND { 
     H5T_ARRAY { [5] H5T_STD_U32LE } "guid"; 
     H5T_STD_I32LE "version"; 
     H5T_IEEE_F64LE "d_tot"; 
     H5T_STD_U32LE "dwl_start_sec"; 
     ..... // More single item elements left out 
     H5T_STD_U32LE "clock_dec_factor"; 
     H5T_STD_U32LE "num_samps_per_swp"; 
     H5T_STD_U32LE "sweep_index"; 
     H5T_STD_U32LE "sequence_dummy"; 
     H5T_ARRAY { [1000] H5T_COMPOUND { 
     H5T_IEEE_F32LE "f_i"; 
     H5T_IEEE_F32LE "f_q"; 
     } } "wb_data"; 
    } 

Wie Sie sehen können zu lesen, in meinem H5T_COMPOUND Ich habe 2 H5T_ARRAY Objekte. Die erste in diesem Beispiel sagt, es ist Größe 5 und die zweite ist Größe 1000. Gibt es eine Möglichkeit, wenn ich das DataType-Objekt habe, um die Dimensionen dieser Arrays zu bestimmen? Ich würde lieber die C++ - Bibliothek verwenden, aber C-Code ist auch in Ordnung.

// Open the file and datatype 
std::string path = "/data/testFile.be01"; 
H5::H5File file(path, H5F_ACC_RDONLY); 
H5::DataType datatype = file.openDataType("DRx3"); 

Antwort

1

Ich muss aus der Datei nur den Datentyp Objekt nicht bekommen, kann ich eine weitere nützliche Unterklasse Objekt erhalten und stattdessen meine CompoundType Objekt erhalten. Dann kann ich das ArrayType-Member abrufen und für seine Dimensionsgröße abfragen.

// Open the file, dataset, and dataspace 
std::string path = "/data/testFile.be01"; 
H5::H5File file(path, H5F_ACC_RDONLY); 
H5::CompType datatype = file.openCompType("DRx3"); 
hsize_t wbDataSize[1]; 
datatype.getMemberArrayType(datatype.getMemberIndex("wb_data")).getArrayDims(wbDataSize);