这个问题非常不清楚。您如何确定具体

线?如果是第n行,最简单的解决方案就是调用

getlinen次,扔掉除最后一个结果以外的所有结果;呼唤

ignoren-1次可能会快一点,但我怀疑如果

您总是读入相同的字符串(而不是构造一个

每次都更新一次),时间上的差异不会很大。如果你

还有其他条件,文件确实很大(从您的

描述(不是)并进行排序,则可以尝试使用二进制搜索,

寻求文件的中间,请提前阅读以找到

下一行的开始,然后根据其决定下一步

值。 (我已使用它在日志文件中查找相关条目。但是

我们正在谈论的文件大小为几千兆字节。)

如果您愿意使用系统相关代码,则可能会有所帮助

内存映射文件,然后搜索\'\\ n \'的第n个出现位置

(std::findn次)。

添加:只是一些快速基准测试。在我的Linux机器上,获取

/usr/share/dict/words起的第100000个字(479623个字,每行一个,

在我的机器上),大约需要

272毫秒,读取所有单词

变成std::vector,然后索引,

256毫秒执行相同操作,但是

加上std::deque

30毫秒,使用getline,但是

只是忽略结果,直到

我感兴趣的一个

20毫秒使用

istream::ignore,以及

使用mmap和6毫秒

在std::find上循环播放。

FWIW,每种情况下的代码是:

对于std ::容器:

template

void Using::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

Container().swap( m_words );

std::copy( std::istream_iterator( input ),

std::istream_iterator(),

std::back_inserter( m_words ) );

if ( static_cast( m_words.size() ) < m_target )

Gabi::ProgramManagement::fatal()

<< \"Not enough words, had \" << m_words.size()

<< \", wanted at least \" << m_target;

m_result = m_words[ m_target ];

}

对于不保存的getline:

void UsingReadAndIgnore::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

std::string dummy;

for ( int count = m_target; count > 0; -- count )

std::getline( input, dummy );

std::getline( input, m_result );

}

对于ignore:

void UsingIgnore::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

for ( int count = m_target; count > 0; -- count )

input.ignore( INT_MAX, \'\\n\' );

std::getline( input, m_result );

}

而对于mmap:

void UsingMMap::operator()()

{

int input = ::open( m_filename.c_str(), O_RDONLY );

if ( input < 0 )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

struct ::stat infos;

if ( ::fstat( input, &infos ) != 0 )

Gabi::ProgramManagement::fatal() << \"Could not stat \" << m_filename;

char* base = (char*)::mmap( NULL, infos.st_size, PROT_READ, MAP_PRIVATE, input, 0 );

if ( base == MAP_FAILED )

Gabi::ProgramManagement::fatal() << \"Could not mmap \" << m_filename;

char const* end = base + infos.st_size;

char const* curr = base;

char const* next = std::find( curr, end, \'\\n\' );

for ( int count = m_target; count > 0 && curr != end; -- count ) {

curr = next + 1;

next = std::find( curr, end, \'\\n\' );

}

m_result = std::string( curr, next );

::munmap( base, infos.st_size );

}

在每种情况下,代码都将运行

c语言getline读取一行命令行,如何从文件的特定行中获取getline()? C ++相关推荐

  1. sed 删除某一行_运用sed命令高效地删除文件的特定行

    运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...

  2. cmd bat删除文件命令_运用sed命令高效地删除文件的特定行

    运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...

  3. python按条件删除文件行_python-删除文件的特定行

    有一次需要删除一些html文件中的统计链接, 通过用遍历文本的每行,然后正则查找网址,使用下面的函数删除行. 删除文本文件的特定行def removeLine(filename, lineno): f ...

  4. 一行js_Node.js 一行命令上传本地文件到服务器

    每次打包完, 都要打开 FileZilla 一顿拖拽然后才能上传代码, 那就立马撸一个自动化脚本就完事了 publish-sftp Github 传送门(~~~~顺便来骗个Star~~~~) 以后一行 ...

  5. php 读取文件指定行,在PHP中读取文件的特定行

    我正在读取 PHP中的文件. 我需要阅读该文件的特定行. 我用过这段代码: fseek($file_handle,$start); while (!feof($file_handle)) { ///G ...

  6. 蒲公英使用一行命令上传Apk文件

    在安卓开发中,为了给测试人员提供测试包,我们经历了从U盘拷贝.发邮件或者QQ.微信等通讯工具发送测试Apk文件,不像IOS一样有AppleStore的测试模式.安卓就只能自己来想办法给测试组提供测试包 ...

  7. linux命令 - tail:查看文件最后几行的命令

    Linux查看文件最后几行的命令 - 宗炳煌 - 博客园 https://www.cnblogs.com/xiaozong/p/5307878.html tail -n 20 filename 说明: ...

  8. python选取特定行_pandas.DataFrame选取/排除特定行的方法

    pandas.DataFrame选取特定行 使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame,如果我们想要像Excel的筛选那样,只要其中的一行或某几行, ...

  9. 一行命令统计出多个文件夹中的多种类型的代码行数

    问题 现在有这些文件夹,里面有不类类型的文件,包括Java,C#和C++.如果我们想知识中间的代码行数应该如何完成呢? drwxrwxrwx 1 hao hao 4.0K Feb 4 17:15 20 ...

最新文章

  1. Android周学习Step By Step(9)--Intent之广播(完)
  2. CSU 1806 Toll 自适应simpson积分+最短路
  3. Java基础案例教程
  4. 跨域问题的简单解决办法
  5. 人生苦短,我学python之python+selenium select下拉框
  6. mysql中字符查询与替换
  7. AT4437-[AGC028C]Min Cost Cycle【结论,堆】
  8. 初探Backbone
  9. task2 EDA数据分析
  10. 静态配置_配置静态LSP示例
  11. [Python]小甲鱼Python视频第020课(函数:内嵌函数和闭包)课后题及参考解答
  12. mysql 外键 150_mysql之创建外键报150错误的处理方法
  13. Android NDK-EGL 初级
  14. mmdetection config文件中几个参数的理解(anchor_scales,anchor_ratios,anchor_strides)
  15. 赵小楼《天道》《遥远的救世主》深度解析(125)做你该做的,受你该受的
  16. 宣传文本html,优秀的宣传语(精选50句)
  17. ExcelVBA:利用SUMIF和OFFSET+MATCH进行多条件求和
  18. vijos 清点人数
  19. Java并发编程之Exchanger
  20. html中ch是什么单位,【CSS】ch(单位名称)

热门文章

  1. cvpr2020 人脸检测与识别_投石科技温度检测人脸识别设备装置
  2. SQLServer 条件查询语句大全
  3. python邮件图片加密软件_用Python发一封图文并茂的邮件
  4. C++重载流插入运算符与流提取运算符
  5. python读取两个csv文件后比较_python – 读取两个csv文件并比较每一行.如果行匹配打印两行,如果不相似则打印无效...
  6. string 中的offset_【Java基础】String常量的长度有限制吗?
  7. springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离
  8. win10-PC端无法输入中文
  9. 【TensorFlow】Win7+Anaconda+python3.6+Tensorflow1.9安装教程
  10. BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】