我想询问一种方便数据记录的文件格式。
例如,我必须记录轨迹数据,数据就是这样。
t, x, y, z
0.001, 0.1, 0.2, 0.3
0.002, 0.11, 0.19, 0.31
0.003, 0.13, 0.16, 0.35
实际上,我搜索了文件格式,发现上面的文件格式被称为 csv(逗号分隔值)。
由于csv将数据记录为纯文本,因此人类可以轻松读取数据。
但有时它需要长数字来记录数据(即15931548831,1248.128657)。
需要的数字越长,写文件所需的时间就越长。
因此,我需要一种满足以下条件的文件格式。
你认识一个人吗?
谢谢。
答案 0 :(得分:0)
您正在寻找Scientific data exchange format,因为这种数据是计算科学所特有的。
您肯定要采用文件标准,因为CSV因能够使用许多不同的工具进行读写而广受欢迎。一种流行的选择是 HDF5 file format 。存在用于任何流行编程语言的HDF5库。 HDF5在存储(许多 n 维)表和关联的元数据方面表现特别出色。
某些人的另一个典型选择是将序列化为二进制浮点数。在C ++中,这将被存档为(来源:a C++ forum)
#include <iostream>
#include <fstream>
int main()
{
float f1 = -187.33667, f2 = 0.0;
std::ofstream out("test.bin",std::ios_base::binary);
if(out.good())
{
std::cout << "Writing floating point number: " << std::fixed << f1 << std::endl;
out.write((char *)&f1,sizeof(float));
out.close();
}
std::ifstream in("test.bin",std::ios_base::binary);
if(in.good())
{
in.read((char *)&f2,sizeof(float));
std::cout << "Reading floating point number: " << std::fixed << f2 << std::endl;
}
return 0;
}
在此特定示例中,实际上是写入了 binary 数据:
$ hexdump test.bin
0000000 5630 c33b
如您所见,该文件需要 4个字节的存储空间,而不是存储ASCII字符-187.33667
时需要的11个字节(11个字符)。有了这个概念( custom 读取器和写入器),您还可以有效地存储数字表,当然,这就是HDF5这样的文件格式在后台工作的方式。
有些科学代码可以实现这样的自定义文件格式,但是我强烈不建议采用自定义文件格式,因为它们容易出错,难以调试,检查并且在编写工具方面很耗时。