我有一个文本文件:
1 2 3 4 5 6 7 8 9
我想用seekg()读取一个特定的数字
ifstream fr("duomenys.txt");
fr.seekg(2,ios::beg);
int n;
fr >> n;
cout << n;
如果我将位置设置为 1、2 或 3,读取的数字是正确的,但使用其他位置,它返回更早的数字,例如位置 3 和 4 都返回 3,位置 5 和 6 都返回 4。如果我'是的,这是因为数字之间的空格而发生的,但我不明白,为什么如果位置是 3,它返回数字 3,而不是预期的 2,因为 2 和 3 之间的空格?还有一个问题,我应该如何实现我的功能,我可以使用他的位置从文件中获取特定数字?我正在尝试像文件中的数组那样做,例如,A[i] 从索引 i 处的数组返回项目,因此我的函数 (i) 应该从文件中返回索引 i 处的项目。
最佳答案
简单的回答是你不能。在文本文件中,
seekg
的参数必须是从先前的返回值
tellg
,除了少数异常(exception),您可以搜索到
文件的开头或结尾。寻求位置 5,对于
例如,没有任何意义。
如果你用二进制打开文件,你可以多做一点, 但搜索位置仍将以字节为单位;你必须知道 每个数字在文件中的确切位置。在文件中 你已经提出,位置将是 0、2、4 ......等等。但是 这假设每个数字正好是一个数字,并且正好是一个空格 将它们分开,这可能不现实。
对于像您这样的小型数据集(至少在示例中),
显而易见的解决方案就是将所有数据读入
std::vector
,并对其进行索引。对于非常大的数据集:
该文件必须明确写入以支持读取,在
二进制模式,每个数字有固定数量的字符
(包括任何分隔符)。然后你可以寻找 i * n
,
其中 i
是你想要的位置,n
是字符数
每个数字。但同样,仅在二进制模式下,读取和
写作。
关于c++ seekg() 读取特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482041/