2017-04-24 3 views
0

Gibt es eine Möglichkeit, wie Spaltennamen in H5-Datei festgelegt werden?C++ - Spaltennamen in HDF5 setzen

Ich kann dies mit zusammengesetzten Datentyp oder es könnte wahrscheinlich mit H5Table getan werden.

Eine Option besteht auch darin, Attribute zu erstellen und Namen von Spalten auf diese Weise zu speichern.

Aber gewöhnliche Matrizen eines einzelnen Datentyps können keine benannten Spalten haben, oder?

Antwort

1

Soweit ich weiß, können Sie den Spaltennamen nicht in einem atomaren Datentyp festlegen. Wie Sie gesehen haben, besteht der Trick von H5Table darin, dass es einen Compound-Datentyp erzeugt, bei dem für jede "Spalte" ein Feld vorhanden ist. LINK.

Wenn ich Sie wäre, würde ich die Spaltennamen in ein Attribut (Array von Zeichenfolgen) schreiben und den Datentyp einfach halten.

Um eine Liste von Zeichenketten in C++ erstellen ich wie folgt:

H5::H5File m_h5File; 
m_h5File = H5File("MyH5File.h5", H5F_ACC_RDWR); 
DataSet theDataSet = m_h5File.openDataSet("/channel001"); 
H5Object * myObject = &theDataSet; 

//The data of the attribute. 
vector<string> att_vector; 
att_vector.push_back("ColName1"); 
att_vector.push_back("ColName2 more characters"); 
att_vector.push_back("ColName3"); 
const int RANK = 1; 
hsize_t dims[RANK]; 
StrType str_type(PredType::C_S1, H5T_VARIABLE); 
dims[0] = att_vector.size(); //The attribute will have 3 strings 
DataSpace att_datspc(RANK, dims); 
Attribute att(myObject->createAttribute("Column_Names" , str_type, att_datspc)); 

vector<const char *> cStrArray; 
for(int index = 0; index < att_vector.size(); ++index) 
{ 
    cStrArray.push_back(att_vector[index].c_str()); 
} 
//att_vector must not change 
att.write(str_type, (void*)&cStrArray[0]);