c ++ seekg()读取特定数字

时间:2014-10-21 08:22:44

标签: c++

我有一个文本文件:

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的项目。

1 个答案:

答案 0 :(得分:2)

简单的答案是你不能。在文本文件中, 对seekg的争论必须是从之前返回的值 tellg,但有一些例外情况可以让您寻求 文件的开头或结尾。寻求位置5,为 例如,没有任何意义。

如果以二进制文件打开文件,可以多做一点, 但寻找位置仍然是以字节为单位;你必须知道 文件中每个数字的确切位置。在文件中 你已经提出过,这些职位将是0,2,4 ......等等 这假设每个数字只有一位数,而且恰好是一个空格 将它们分开,这可能不太现实。

对于像你这样的小数据集(至少在这个例子中), 显而易见的解决方案就是将所有数据读入一个 std::vector,并将其编入索引。对于非常大的数据集: 必须以明确的方式编写文件以支持读取 二进制模式,每个数字具有固定数量的字符 (包括任何分隔符)。然后你可以寻求i * n, 其中i是您想要的位置,n是字符数 每个号码。但同样,只有二进制模式,阅读和 写入。