数据提取
刚刚在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 }
当然,这样做的话也有局限的,把数据存在内存是不明智的选择,在数据少的情况写还可以接受吧~!
浙公网安备 33010602011771号