HDF5:在数据集中插入一组字符串
HDF5: inserting a set of strings in a dataset
我目前正在学习HDF5 API,并试图将一组C++std::字符串插入到HDF5数据集中(1列)。
在下面的代码段中,我应该如何在vector<string>
上循环并在正确的索引处插入每个字符串?
我应该如何告诉HDF5我是想使用固定长度的字符串还是可以使用任何长度的std::字符串?
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);
首先,用指向字符串的指针制作一个char*
的C风格数组:
const size_t n = samples.size();
char* data[n];
for (size_t i = 0; i < n; i++)
{
data[i] = samples[i].c_str();
}
然后一口气写下所有内容:
H5Dwrite(dataset, datatype, dataspace, H5S_ALL, H5P_DEFAULT, data);
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 如何将字符串拆分为一组 3 个字符,它们之间有空格
- C 一组字符串的所有布置
- 如何将字符串形式的日期 ( "Dec 25, 2012" ) 转换为一组整数 (12/25/12)?
- 在 c++ 中将 find_first_of 与字符串一起使用,而不是一组预定义字符
- 从向量<T>创建一组字符串
- 如何在循环移动后从给定的字符串中找到一组不同的字符串
- C 排序无法排序一组字符串
- 如何将一组十六进制字符串转换为字节阵列
- 将逗号添加到存储在数组中的一组字符串中
- 如何在字符串中查找一组字符
- C++ 替换<< >>分量之间的一组字符串
- 将一组字符串分配给向量c++的内容
- C++银行项目;如何将一组字符串读取为单独的浮点数并添加它们
- 如何在C++中生成一组唯一的哈希字符串
- 如何打印一组要输出的字符串?C++
- 如何使用bucket排序对一组字符串进行排序
- c++Why是关于字符串的教程中使用的一组字符
- 将一组字符串与一个字符串进行比较的最快方法是什么?
- HDF5:在数据集中插入一组字符串