用C++将csv 格式转为hdf5格式
时间: 2023-10-23 11:08:43 浏览: 49
要将csv格式转换为hdf5格式,需要使用C++中的hdf5库。下面是一个简单的示例程序,演示了如何将csv文件转换为hdf5格式。
```c++
#include <iostream>
#include "hdf5.h"
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
//打开csv文件
ifstream infile("data.csv");
string line;
//获取csv文件行数和列数
int rows = 0, cols = 0;
while (getline(infile, line))
{
rows++;
int cur_cols = 0;
for (int i = 0; i < line.length(); i++)
{
if (line[i] == ',')
cur_cols++;
}
if (cur_cols > cols)
cols = cur_cols;
}
infile.close();
//创建hdf5文件
hid_t file_id = H5Fcreate("data.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
//创建数据集
hsize_t dims[2] = { rows, cols };
hid_t dataspace_id = H5Screate_simple(2, dims, NULL);
hid_t dataset_id = H5Dcreate(file_id, "/data", H5T_NATIVE_DOUBLE, dataspace_id,
H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
//读取csv文件数据并写入hdf5文件
double* data = new double[rows * cols];
infile.open("data.csv");
int r = 0;
while (getline(infile, line))
{
int c = 0;
int j = 0;
while (j < line.length())
{
int k = j;
while (k < line.length() && line[k] != ',')
k++;
string val = line.substr(j, k - j);
data[r * cols + c] = stod(val);
j = k + 1;
c++;
}
r++;
}
infile.close();
H5Dwrite(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
//释放资源
delete[] data;
H5Sclose(dataspace_id);
H5Dclose(dataset_id);
H5Fclose(file_id);
cout << "Done!" << endl;
return 0;
}
```
这个程序假设csv文件中的每个值都是double类型。如果csv文件中包含其他类型的数据,需要相应地更改代码。