c语言getline读取一行命令行,如何从文件的特定行中获取getline()? C ++
这个问题非常不清楚。您如何确定具体
线?如果是第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 ++相关推荐
- sed 删除某一行_运用sed命令高效地删除文件的特定行
运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...
- cmd bat删除文件命令_运用sed命令高效地删除文件的特定行
运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...
- python按条件删除文件行_python-删除文件的特定行
有一次需要删除一些html文件中的统计链接, 通过用遍历文本的每行,然后正则查找网址,使用下面的函数删除行. 删除文本文件的特定行def removeLine(filename, lineno): f ...
- 一行js_Node.js 一行命令上传本地文件到服务器
每次打包完, 都要打开 FileZilla 一顿拖拽然后才能上传代码, 那就立马撸一个自动化脚本就完事了 publish-sftp Github 传送门(~~~~顺便来骗个Star~~~~) 以后一行 ...
- php 读取文件指定行,在PHP中读取文件的特定行
我正在读取 PHP中的文件. 我需要阅读该文件的特定行. 我用过这段代码: fseek($file_handle,$start); while (!feof($file_handle)) { ///G ...
- 蒲公英使用一行命令上传Apk文件
在安卓开发中,为了给测试人员提供测试包,我们经历了从U盘拷贝.发邮件或者QQ.微信等通讯工具发送测试Apk文件,不像IOS一样有AppleStore的测试模式.安卓就只能自己来想办法给测试组提供测试包 ...
- linux命令 - tail:查看文件最后几行的命令
Linux查看文件最后几行的命令 - 宗炳煌 - 博客园 https://www.cnblogs.com/xiaozong/p/5307878.html tail -n 20 filename 说明: ...
- python选取特定行_pandas.DataFrame选取/排除特定行的方法
pandas.DataFrame选取特定行 使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame,如果我们想要像Excel的筛选那样,只要其中的一行或某几行, ...
- 一行命令统计出多个文件夹中的多种类型的代码行数
问题 现在有这些文件夹,里面有不类类型的文件,包括Java,C#和C++.如果我们想知识中间的代码行数应该如何完成呢? drwxrwxrwx 1 hao hao 4.0K Feb 4 17:15 20 ...
最新文章
- Android周学习Step By Step(9)--Intent之广播(完)
- CSU 1806 Toll 自适应simpson积分+最短路
- Java基础案例教程
- 跨域问题的简单解决办法
- 人生苦短,我学python之python+selenium select下拉框
- mysql中字符查询与替换
- AT4437-[AGC028C]Min Cost Cycle【结论,堆】
- 初探Backbone
- task2 EDA数据分析
- 静态配置_配置静态LSP示例
- [Python]小甲鱼Python视频第020课(函数:内嵌函数和闭包)课后题及参考解答
- mysql 外键 150_mysql之创建外键报150错误的处理方法
- Android NDK-EGL 初级
- mmdetection config文件中几个参数的理解(anchor_scales,anchor_ratios,anchor_strides)
- 赵小楼《天道》《遥远的救世主》深度解析(125)做你该做的,受你该受的
- 宣传文本html,优秀的宣传语(精选50句)
- ExcelVBA:利用SUMIF和OFFSET+MATCH进行多条件求和
- vijos 清点人数
- Java并发编程之Exchanger
- html中ch是什么单位,【CSS】ch(单位名称)
热门文章
- cvpr2020 人脸检测与识别_投石科技温度检测人脸识别设备装置
- SQLServer 条件查询语句大全
- python邮件图片加密软件_用Python发一封图文并茂的邮件
- C++重载流插入运算符与流提取运算符
- python读取两个csv文件后比较_python – 读取两个csv文件并比较每一行.如果行匹配打印两行,如果不相似则打印无效...
- string 中的offset_【Java基础】String常量的长度有限制吗?
- springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离
- win10-PC端无法输入中文
- 【TensorFlow】Win7+Anaconda+python3.6+Tensorflow1.9安装教程
- BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】