数据提取

刚刚在CSDN论坛看到一个帖子:

在一个日志文件中,如何使用C/C++标准库读取一个范围内的记录?
比如:读取在2012-08-10 01:10:23至2012-08-10 01:15:55之间的记录
....................
2012-08-10 01:10:23 200 9.26.107.207   
2012-08-10 01:10:55 220 9.26.89.201   
2012-08-10 01:12:15 120 9.26.107.112   
2012-08-10 01:15:55 120 9.26.87.16   
....................
如何利用lseek()读取两个时间点间的所有记录? 如果文件很大如何加速查找? 谢谢!

数据初始化是这样的:

 

2012-08-10 01:10:20 200 10.26.107.207
2012-08-10 01:10:21 200 11.26.107.207
2012-08-10 01:10:22 200 12.26.107.207
2012-08-10 01:10:23 200 13.26.107.207
2012-08-10 01:10:55 200 14.26.107.207
2012-08-10 01:12:15 200 15.26.107.207
2012-08-10 01:15:55 200 16.26.107.207
2012-08-10 01:16:55 200 17.26.107.207
2012-08-10 01:16:56 200 18.26.107.207
而输出是:
2012-08-10 01:10:20
2012-08-10 01:10:21
2012-08-10 01:10:22
2012-08-10 01:10:23
2012-08-10 01:10:55
2012-08-10 01:12:15
2012-08-10 01:15:55
2012-08-10 01:16:55
2012-08-10 01:16:56
这样子看起来挺简单的,很久没有写过C++了,所以花了十多分钟写了一下子。
 1 //datadraw.cpp
 2   #include <iostream>
 3  #include <string>
 4  #include <vector>
 5 #include <fstream>
 6 
 7  using namespace std;
 8  
 9  int main()
10 {
11      ifstream file;
12      file.open("data.txt");
13      vector<string> lines;
14      string line;
15      while(getline(file,line))
16          lines.push_back(line);
17      string str;
18      ofstream out("data1.txt");
19      for(int i=0; i<lines.size(); i++)
20      {
21          str=lines[i];
22          for(int j=0; j<19; j++)
23              out<<str[j];
24          out<<endl;
25      }
26      return 0;
27  }

当然,这样做的话也有局限的,把数据存在内存是不明智的选择,在数据少的情况写还可以接受吧~!

 

 

posted on 2012-08-18 16:49  kaka_  阅读(247)  评论(1)    收藏  举报

导航