我想询问一种文件格式,它可以方便地进行数据记录。
例如,我必须记录轨迹数据,数据将是这样的。
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)。
并且需要更长的数字,写入文件所需的时间越多。
因此,我需要一种满足以下条件的文件格式。
你认识的人吗?
谢谢。
您正在寻找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;
}
在这个特定的例子中,真正的二进制数据被写入:
$ hexdump test.bin
0000000 5630 c33b
如您所见,在存储ASCII字符-187.33667
时,文件需要4个字节的存储空间而不是11个字节(11个字符)。有了这个概念(自定义阅读器和编写器),您还可以有效地存储数字表格,当然这也是HDF5等文件格式的工作原理。
有科学代码实现这样的自定义文件格式,但我强烈反对采用自定义文件格式,因为它们在编写工具方面容易出错,难以调试,检查和耗时。