我有一个文本文件:
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,则readed数字是正确的,但是使用其他位置,它会返回更早的数字,例如位置3和4都返回3,位置5和6都返回4.如果我&# 39;对,这是因为数字之间的空格而发生,但是我没有得到它,为什么如果位置是3,它返回数字3,而不是2,因为2和3之间的空间?还有一个问题,我应该如何使用我的功能,我可以使用他的位置从文件中获取特定数字?我试图做一个数组,就像在一个文件中,例如,A [i]从索引i的数组返回项目,所以我的函数(i)应该从文件返回索引i的项目。
答案 0 :(得分:2)
简单的答案是你不能。在文本文件中,
对seekg
的争论必须是从之前返回的值
tellg
,但有一些例外情况可以让您寻求
文件的开头或结尾。寻求位置5,为
例如,没有任何意义。
如果以二进制文件打开文件,可以多做一点, 但寻找位置仍然是以字节为单位;你必须知道 文件中每个数字的确切位置。在文件中 你已经提出过,这些职位将是0,2,4 ......等等 这假设每个数字只有一位数,而且恰好是一个空格 将它们分开,这可能不太现实。
对于像你这样的小数据集(至少在这个例子中),
显而易见的解决方案就是将所有数据读入一个
std::vector
,并将其编入索引。对于非常大的数据集:
必须以明确的方式编写文件以支持读取
二进制模式,每个数字具有固定数量的字符
(包括任何分隔符)。然后你可以寻求i * n
,
其中i
是您想要的位置,n
是字符数
每个号码。但同样,只有二进制模式,阅读和
写入。