用std::find查找文件流中的内容

原创 2006年06月23日 13:56:00

用std::find查找文件流中的内容
mythma

         在一般的情况下, 我是很少使用迭代器istream_iterator的。最近在为项目编写一个读特定格式文件的功能时,发现使用istream_iterator和std::find能非常方便的实现文件内容的查找。


 

注:以下全部假定是文本文件,二进制文件没有测试过。

 



假定要查找的是一个文件中的某个string,可以这样实现:

 

 

  ifstream fIn("yourfile");
  
if(fIn)
  
{
   istream_iterator
<string> strReader(fIn);// file begin
   istream_iterator<string> strEOF;  // file end

   
string strToFind = "mythma";
   strReader
=find(strReader, strEOF, strToFind);
   
while(strReader != strEOF)
   

     
++strReader;  
    
// do something 
    
//*strReader; //dereference to get current string
    
// find next 
    strReader=find(strReader, strEOF, strToFind);
   }

  }



从上面的代码可以看出, 此时fIn可以看作是一个存放const string的容器。

 



题外话:

1、什么时候可以考虑使用istream_iterator?

我觉得,当文件中是同构数据的时候,使用istream_iterator可以方便的读取、查找对象。
1) 如果文件中的内容都是同一种基本类型的数据,如int,可以这样用istream_iterator:
   istream_iterator<int> intReader(fIn);// file begin
   istream_iterator<int> intEOF;  // file end

2) 如果是一个个自定义CUser对象的数据顺序存放的,需要重载operator >>,然后这样用:
   istream_iterator<CUser> intReader(fIn);// file begin
   istream_iterator<CUser> intEOF;  // file end

如果需要查找对象,在特定的情况下还需要重载比较运算符。

 

2、文件中是异构数据情况的处理

首先文件中所有的内容都可以用string来操作,这种处理方式无需讨论。
若用istream_iterator<int>读取包含非int数据的文件时会出现什么情况?
经测试,当istream_iterator<int>遇到第一个非int数据时,迭代终止。
---
测试代码:

  using namespace std;
  ifstream fIn(
"test.txt");
  
if(fIn)
  
{
   istream_iterator
<int> intReader(fIn);
   istream_iterator
<int> intEOF;

   copy(intReader, intEOF, ostream_iterator
<int>(cout, " "));
  }


---
测试文件test.txt:
1 22 3.4 haha 44 hello
---
输出结果:
1 22 3

3、效率问题
istream_iterator除了使代码看起来比较简洁外,大家最关心的恐怕就是效率问题。我没有测试比较过

STL 查找vector容器中的指定对象:find()与find_if()算法

1 从vector容器中查找指定对象:find()算法    STL的通用算法find()和find_if()可以查找指定对象,参数1,即首iterator指着开始的位置,参数2,即次iterato...
  • master_feng2009
  • master_feng2009
  • 2013年09月20日 21:48
  • 7289

C++ find()函数用法(一般用于vector的查找)

相信学习C++的人有很多人用过CString.find()函数,但是你有么有用过 std::find() 函数呢?        find函数主要实现的是在容器内查找指定的元素,并且这个元素必须是基...
  • zhangweijiqn
  • zhangweijiqn
  • 2013年06月16日 19:40
  • 55037

linux下使用find xargs grep查找文件及文件内容

1,在某个路径下查文件。 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录。 find /etc -name ...
  • cbk861110
  • cbk861110
  • 2014年05月06日 19:38
  • 15718

linux下使用find xargs grep查找文件及文件内容

1,在某个路径下查文件。 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录。 find /et...
  • qq_19244267
  • qq_19244267
  • 2016年09月07日 09:53
  • 1014

find命令的使用(查找文件或者文件内容)

本文来自:http://xl2.blog.163.com/blog/static/172263832011116105015967/ 通过文件名查找法 find / -name...
  • ljf69
  • ljf69
  • 2013年08月13日 14:00
  • 1068

linux下使用find xargs grep查找文件及文件内容

1,在某个路径下查文件。 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录。 find /et...
  • sir_zeng
  • sir_zeng
  • 2013年01月28日 19:57
  • 4357

linux查找文件命令find

  • 2014年08月14日 14:32
  • 20KB
  • 下载

linux find 查找文件

http://www.linuxsir.org/main/node/137  一、find 命令格式 1、find命令的一般形式为; find pathname -options...
  • mzwang123
  • mzwang123
  • 2011年08月24日 11:28
  • 2189

ubuntu 使用 find&grep 查找文件

(2012-10-24 11:31:07) 转载▼ 标签: 杂谈 分类:Linux 每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文...
  • prike
  • prike
  • 2015年10月25日 10:28
  • 1863

locate 和 find:两个查找文件的命令

原文:http://hi.baidu.com/hunnon/blog/item/20f6a627e2b4481d8a82a1d7.html 对于初次切换到 Linux 系统的朋友来说,如果想要从命令...
  • Hello_Ken
  • Hello_Ken
  • 2012年04月26日 04:36
  • 305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用std::find查找文件流中的内容
举报原因:
原因补充:

(最多只允许输入30个字)