c++中,运行getline()函数时,如何指定文件指针的位置
2个回答
展开全部
设置“输入流指针控制字”的成员函数:
istream&istream::seekg(streampos);
//指针直接定位
istream&istream::seekg(streamoff, ios::seek_dir);
//指针相对定位
long
istream::tellg(); //返回当前指针位置
流的指针位置类型streampos和流的指针偏移类型streamoff定义为长整型,也就是可访问文件的最大长度为4G。例:
datafile.seekg(-20L,ios::cur);
//表示将文件定位指针从当前位置向文件头部方向移20个字节。
datafile.seekg(20L,ios::beg);
//表示将文件定位指针从文件头向文件尾方向移20个字节。
datafile.seekg(-20L,ios::end);
//表示将文件定位指针从文件尾向文件头方向移20个字节。
tellg()和seekg()往往配合使用。
//指针不可移到文件头之前或文件尾之后。
如何定位每一行,这个有点困难,因为不一定每行的偏移量都相同,要么就先计算出每行的偏移量,然后在计算出总偏移量,用上边的seekg函数来定位偏移位置。
还有一种比较笨的办法就是,从开头读,每次读一行,直到读到你需要的那行时候再把读取的数据取出来,getline就是每次读一行,多次调用就可以每行循环下读。
至于你问怎么获得这个随机的行数,我想这个不用我说了吧,获取一个随机的数,用rand函数就行了,先获取出来你要读取的行数,然后按照上边的方法来进行。
istream&istream::seekg(streampos);
//指针直接定位
istream&istream::seekg(streamoff, ios::seek_dir);
//指针相对定位
long
istream::tellg(); //返回当前指针位置
流的指针位置类型streampos和流的指针偏移类型streamoff定义为长整型,也就是可访问文件的最大长度为4G。例:
datafile.seekg(-20L,ios::cur);
//表示将文件定位指针从当前位置向文件头部方向移20个字节。
datafile.seekg(20L,ios::beg);
//表示将文件定位指针从文件头向文件尾方向移20个字节。
datafile.seekg(-20L,ios::end);
//表示将文件定位指针从文件尾向文件头方向移20个字节。
tellg()和seekg()往往配合使用。
//指针不可移到文件头之前或文件尾之后。
如何定位每一行,这个有点困难,因为不一定每行的偏移量都相同,要么就先计算出每行的偏移量,然后在计算出总偏移量,用上边的seekg函数来定位偏移位置。
还有一种比较笨的办法就是,从开头读,每次读一行,直到读到你需要的那行时候再把读取的数据取出来,getline就是每次读一行,多次调用就可以每行循环下读。
至于你问怎么获得这个随机的行数,我想这个不用我说了吧,获取一个随机的数,用rand函数就行了,先获取出来你要读取的行数,然后按照上边的方法来进行。
展开全部
随机获取某一行?你得先知道文件有多少行啊,这个目前我还不会,围观求答案
追问
呵呵,你的回答好雷啊,如果知道文件有20行呢
追答
这个其实挺简单的,你就一个一个读入字符,不要跳过任何一个,用getchar()还是什么的我忘了,让后如果你要复制的行数不等于1的话,就记录读到的'\n'的数目,也就是行数,到了n-1(n为你要复制的行数)的时候调用一次getline或者gets就可以读到你要的那一行了,挺好的;其实不知道行数也行,你就是这往下读呗,如果还没到那一行文件就结束了,你就输出错误信息“文件未达到指定长度”,这个很简单么;刚才那么回答,是我不知道除了读取一边文件外还有什么方法可以快速获取文件行数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询