用于“实时”读取文件数据的小工具 ----- dread
2013-10-31 12:39
309 查看
/* * File: dread.cpp * Author: 肖武<tsxw24@gmail.com> * * Created on 2013年10月31日, 上午10:02 * * 延时读取(delayed read)文件 */ #include <cstdlib> #include <iostream> #include <ctime> #include <fstream> using namespace std; /* * */ int main(int argc, char* argv[]) { //参数变量初始化 string in_file; int sleep_time = 3; time_t end_time = 0; //获取参数 int ch; opterr = 0; //选项错误时不让报错 while ((ch = getopt(argc, argv, "s:t:f:")) != -1) { switch (ch) { case 'f': in_file = string(optarg);break; case 't': end_time = atol(optarg); break; case 's': sleep_time = atoi(optarg); break; } } //参数检查 if (in_file == "") { cout<< "延时读取(delayed read)文件 v1.0\n" "用法:"<<argv[0]<<" -f file_path [-s sleep_time] [-e end_time]\n" "选项:\n" "\t-f\t必须,读取的文件路径\n" "\t-s\t可选,读到文件末尾时休眠的秒数。默认为3\n" "\t-e\t可选,结束时间戳,在此时间之前读到文件末尾时不会退出,而是休眠sleep_time秒后再次读取。默认为0\n\n" "作者:肖武<tsxw24@gmail.com>" <<endl; return 1; } ifstream ifs(in_file.c_str(), ios::in); if (!ifs.is_open()) { cerr<<"打开数据文件失败:"<<in_file<<endl; return 1; } string row; string val; size_t seek = 0; time_t now = 0; while(1) { if (ifs.peek() == EOF) { time(&now); if (now > end_time) { break; } ifs.clear(); sleep(sleep_time); ifs.seekg(seek, ios::beg); continue; } getline(ifs, row); seek = ifs.tellg(); cout<<row<<endl; } ifs.close(); return 0; }
编译
$ g++ -o dread dread.cpp
使用
[root@localhost dread]# ./dread 延时读取(delayed read)文件 v1.0 用法:./dread -f file_path [-s sleep_time] [-e end_time] 选项: -f 必须,读取的文件路径 -s 可选,读到文件末尾时休眠的秒数。默认为3 -e 可选,结束时间戳,在此时间之前读到文件末尾时不会退出,而是休眠sleep_time秒后再次读取。默认为0 作者:肖武<tsxw24@gmail.com>
使用场景举例:日志文件处理
日志实时产生,追加方式写入文件中,每小时一个文件。现需要每小时结束时尽快分析处理上个小时的日志数据,形成统计报表。那么单条日志的预处理工作就可以提前进行,如下
$ ./dread -f log/2013/10/31/12.txt -t `date -d "2013-10-31 13:01"` |awk '{#日志处理.....}' > ret.txt
为了数据上的完整,考虑到13点整时可能还有数据未写入,可以多延迟等待1分钟
相关文章推荐
- 关于C++二进制文件读取转换,数据版本升级,增加字段等结构调整工具的思路。
- ORACLE DBA工具收集(Oracle DUL/AUL/ODU 恢复工具,可以脱离Oracle运行环境,直接从数据文件中读取记录)
- 利用Mxnet自带的工具,进行数据转化,读取图片文件
- 监听器监听日志,实时读取日志文件,把读取到的数据入库
- 用于Unity上的CSV文件读取工具,一句代码缓存、提取
- xml文件处理的好工具--读取数据篇--cnjsp.org
- Python读取txt文件数据的方法(用于接口自动化参数化数据)
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
- 用groovy简化java反射编写一个基于行数据对象的自动生成excel文件对象的工具
- 数据字典生成工具之旅(3):PowerDesign文件组成结构介绍及操作
- Hadoop文件系统操作之读取写入数据
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- kettle读取文件目录下的数据结构一致的所有数据文件信息和内容
- js读取json文件片段中的数据实例
- matlab处理txt文本文件---数据格式要有规律性,否则要用编写特定方式进行读取
- live555Server读取文件修改为socket接收数据遇到的问题
- VB读取超过2G的数据文件
- Android读取assets目录下文件数据内容
- IO流_随机访问流读取数据和操作文件指针