newbie: inserting a large set of strings in a dataset

Hi all,

I'm currently learning the HDF5 API and I'm trying to insert a large set
of C++ std::string into a HDF5 dataset (1 column).

In the following snippet, how should I loop over a vector<string> and
insert each string at the right index ?

How should I tell HDF5 whether I want to use a fixed-length string or a
can-have-any-length std::string ?

Thanks !

vector<string> samples;
(...)
/* create HDF5 file */
hid_t hdf5file= H5Fcreate(hdf5_filename, H5F_ACC_TRUNC, H5P_DEFAULT,
H5P_DEFAULT);
if(hdf5file==-1)
    {
    cerr << "Cannot create HDF5 file "<< hdf5_filename << endl;
    return(EXIT_FAILURE);
    }
/* create a group in this file */
hid_t group = H5Gcreate2(hdf5file, "/MyGroup", H5P_DEFAULT,
H5P_DEFAULT, H5P_DEFAULT);
if(group==-1)
    {
    cerr << "Cannot create HDF5 group "<< endl;
    return(EXIT_FAILURE);
    }
/* create a dataspace for the samples array of one dimension */
hsize_t dim1=samples.size();
hid_t dataspace = H5Screate_simple(1, &dim1, NULL);
if(dataspace==-1)
    {
    cerr << "Cannot create HDF5 dataspace "<< endl;
    return(EXIT_FAILURE);
    }
/* create datatype for a string . How shoud I tell if i want a
fixed-length string or a can-have-any-length string ?*/
hid_t datatype = H5Tcopy(H5T_C_S1);
if(datatype==-1)
    {
    cerr << "Cannot create H5Tset_size "<< endl;
    return(EXIT_FAILURE);
    }
int ret = H5Tset_size (datatype, H5T_VARIABLE);
if(ret!=0)
    {
    cerr << "Cannot create H5Tset_size "<< endl;
    return(EXIT_FAILURE);
    }
hid_t dataset = H5Dcreate2(group, "Samples", datatype, dataspace,
        H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

for(vector<string>::size_type i=0;i< samples.size();++i)
    {
    /** here I'm puzzled, how should I insert the value of
samples[i].c_str() at
            the i-th index of the dataset ? */
    const char* sampleName= samples[i].c_str() ;
    ???
    ???
    ???
    }

/* close data set */
H5Dclose(dataset);
/* close datatype */
H5Tclose(datatype);
/* close the dataspace */
H5Sclose(dataspace);

/* close the group */
H5Gclose(group);

/* close hdf5 file */
H5Fclose(hdf5file);

Hi Pierre,

···

On 06/03/2011 07:16 PM, Pierre LINDENBAUM wrote:

Hi all,

I'm currently learning the HDF5 API and I'm trying to insert a large set
of C++ std::string into a HDF5 dataset (1 column).

In the following snippet, how should I loop over a vector<string> and
insert each string at the right index ?

I asked this question on stackoverflow:

In the end I ended up answering it myself - but I'm not sure it's optimal.

Regards,

Richard

--
Richard Corden