Dado un vector de cadenas, ¿cuál es la mejor manera de escribirlas en un conjunto de datos HDF5? En el momento que estoy haciendo algo como lo siguiente:¿Cuál es la mejor forma de escribir un contenedor std :: vector <std :: string> en un conjunto de datos HDF5?
const unsigned int MaxStrLength = 512;
struct TempContainer {
char string[MaxStrLength];
};
void writeVector (hid_t group, std::vector<std::string> const & v)
{
//
// Firstly copy the contents of the vector into a temporary container
std::vector<TempContainer> tc;
for (std::vector<std::string>::const_iterator i = v.begin()
, end = v.end()
; i != end
; ++i)
{
TempContainer t;
strncpy (t.string, i->c_str(), MaxStrLength);
tc.push_back (t);
}
//
// Write the temporary container to a dataset
hsize_t dims[] = { tc.size() } ;
hid_t dataspace = H5Screate_simple(sizeof(dims)/sizeof(*dims)
, dims
, NULL);
hid_t strtype = H5Tcopy (H5T_C_S1);
H5Tset_size (strtype, MaxStrLength);
hid_t datatype = H5Tcreate (H5T_COMPOUND, sizeof (TempConainer));
H5Tinsert (datatype
, "string"
, HOFFSET(TempContainer, string)
, strtype);
hid_t dataset = H5Dcreate1 (group
, "files"
, datatype
, dataspace
, H5P_DEFAULT);
H5Dwrite (dataset, datatype, H5S_ALL, H5S_ALL, H5P_DEFAULT, &tc[0]);
H5Dclose (dataset);
H5Sclose (dataspace);
H5Tclose (strtype);
H5Tclose (datatype);
}
Como mínimo, me gustaría cambiar a lo anterior de forma que:
- Utiliza cadenas de longitud variable
- Pongo 't necesita tener un contenedor temporal
tengo ninguna restricción sobre cómo almacenar los datos así que por ejemplo, no tiene por qué ser un COMPUESTO tipo de datos si hay una mejor manera de hacerlo.
EDIT: Simplemente para reducir el problema, estoy relativamente familiarizado con jugar con los datos en el lado C++, es el lado HDF5 donde necesito la mayor parte de la ayuda.
Gracias por su ayuda.
¿Sabes qué? HDF5 es una de esas cosas que siempre quise leer y escribir. Pero la procrastinación es mi segundo nombre que no se ha materializado. Gracias a ti, he decidido darle un tiro más dedicado esta vez. Estaría muy, muy interesado en saber dónde estás usando esto, si es posible. – dirkgently
Estamos buscando cambiar cómo nuestra herramienta de análisis estático almacena los datos que recopila de su análisis. Los datos contendrán estructuras similares a árboles (ámbitos, tipos, etc.) y listas de diagnósticos. En esta etapa, estoy evaluando qué tan bien maneja HDF5 los diferentes tipos de datos. –
Esta pregunta (que pregunté) describe el tipo de características que estamos evaluando: http://stackoverflow.com/questions/547195/evaluating-hdf5-what-limitations-features-does-hdf5-provide-for-modelling -data –