gpt4 book ai didi

c++ - 写入文件,读取时分隔值

转载 作者:行者123 更新时间:2023-11-30 02:51:04 26 4
gpt4 key购买 nike

我正在尝试自学编程,而我难以理解的一个早期主题是文件 IO。

到目前为止,我知道我可以保存以逗号分隔的数据,以便以后成功读取该数据。执行以下操作:

int x[] = {1,22,333,4444,55555};
std::ofstream FileWriter;
std::string dataName = "One through Five";
for( int i = 0; i < 5; ++i)
{
FileWriter << x[i] << ',';
}
FileWriter << dataName << std::endl;
FileWriter.close();

这当然很简单,但看起来很俗气,而且实际上有点低效。我想知道有没有更好的方法来保存数据,并且在我以后阅读时仍然可以分离。

不幸的是,我所做的搜索只产生了以下内容:

std::getline( FileReader, myStringBuffer, ',');

那么我是否可以存储单独的数据点,以便在读取时将它们区分为单独的,而在保存时不使用分隔符?也就是说,不使用某些字符或空格分隔数据。

最佳答案

基本的二进制文件 io 实践将做你想做的。读取二进制数据时,需要知道所读取的每条数据的大小;知道这一点将插入您做出很多设计决策。如果你想读入一个 int 后跟一个字符串,你需要知道一个 int 的大小(通过调用 sizeof(int) 很容易找到),这样你就可以从二进制 blob 中“蚕食”一个 int 的数据值(value)正在尝试从中加载数据,然后在读取 int 的数据值(value)后,您需要知道您的字符串有多大。由于字符串的长度是可变的,您要么需要假设一个标准长度(糟糕!),要么首先从已知大小的数据中读取长度,然后将那么多字节读入字符串。因此,您的数据编写器需要在写出字符串之前写出字符串(或任何其他可变大小数据类型)的长度,作为已知数据大小(比如将大小信息写为无符号整数)。

有关组织二进制数据以进行读/写的巧妙方法,请查看交换文件格式 (IFF)。它是 TIFF、RIFF 等的基础,是设计二进制文件 blob 的好方法。它基本上将数据存储为“ block ”,其中数据首先写出一个 block ID,然后是 block 的大小(以字节为单位),然后是该 block 的数据。这样,读取器程序可以检查 block ID,如果它不想/不知道如何处理某种甚至未知类型的数据,它可以跳过以字节为单位的 block 大小并读取下一个 block 。

关于c++ - 写入文件,读取时分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com