1. 程式人生 > >用於“實時”讀取檔案資料的小工具 ----- dread

用於“實時”讀取檔案資料的小工具 ----- dread

/*
 * File:   dread.cpp
 * Author: 肖武<[email protected]>
 *
 * 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"
				"作者:肖武<
[email protected]
>" <<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 

使用

[[email protected] dread]# ./dread 
延時讀取(delayed read)檔案 v1.0
用法:./dread -f file_path [-s sleep_time] [-e end_time]
選項:
	-f	必須,讀取的檔案路徑
	-s	可選,讀到檔案末尾時休眠的秒數。預設為3
	-e	可選,結束時間戳,在此時間之前讀到檔案末尾時不會退出,而是休眠sleep_time秒後再次讀取。預設為0

作者:肖武<[email protected]>

使用場景舉例:日誌檔案處理

日誌實時產生,追加方式寫入檔案中,每小時一個檔案。現需要每小時結束時儘快分析處理上個小時的日誌資料,形成統計報表。那麼單條日誌的預處理工作就可以提前進行,如下

$ ./dread -f log/2013/10/31/12.txt -t `date -d "2013-10-31 13:01"` |awk '{#日誌處理.....}' > ret.txt
為了資料上的完整,考慮到13點整時可能還有資料未寫入,可以多延遲等待1分鐘

相關推薦

用於實時讀取檔案資料工具 ----- dread

/* * File: dread.cpp * Author: 肖武<[email protected]> * * Created on 2013年10月31日, 上午10:02 * * 延時讀取(delayed read)檔案 */

FileInputStream讀取位元組流。讀取檔案資料的兩種方式(寫的好)

總結:    //1讀取檔案的資料到位元組流inputStream     InputStream inputStream = new FileInputStream("D:\\demo.txt");//讀取檔案的資料到位元組流inputStream。

python用類讀取檔案資料並計算矩形面積

1.建立一個類Rectangle,已知a、b求面積,求三角形的面積 2.結合題目一,從題目一檔案中讀取資料,並採用類的方法,將計算的結果寫在另一個文件中。 (1)利用類進行計算一個矩形的面積,已經a、b邊長。 class Rectangle: '''這是關於矩形面積的計算公式,只用給出矩

hidden for mac(桌面檔案隱藏工具)

想要快速隱藏mac電腦上的桌面圖示嗎?趕緊下載免費版的hidden for mac,只需點選一下,選擇隱藏即可快速隱藏桌面上的所有圖示,非常方便!本站現在提供hidden mac版下載,附使用教程,請放心下載! hidden mac版安裝教程 下載軟體完成後,開啟映象包,拖動【hidd

資料預處理:讀取檔案資料,並存為python陣列

檔案的簡單讀取 # 定義一個將檔案中的資料轉化為陣列的類 import numpy as np class DataUtil: # =============================================================================

檔案拷貝工具(node)

var fs = require('fs'); var path = require('path'); //注:路徑必須都是絕對路勁 //基礎目錄(源目錄) var basePath = path.resolve('E:\\基礎專案\\HTMLandCSS_Project\\react

C#儲存資料檔案讀取檔案資料

#region 檔案讀取與儲存 /// <summary> /// 獲取檔案中的資料串 /// </summary> public static string fileToString(String filePath) { string s

基於python實時監控cpu的工具

雖然寫的很不完善,但是當練手吧,對於實時監控cpu還是有點用處的,雖然android studio已經提供了一樣的功能,但是能夠記錄並生成成本地csv檔案還是比as多一個功能的。 結果圖: 直接放原始碼: # !_*_coding:ut

JAVA InputStream讀取檔案資料

1. 關於InputStream.read()      在從資料流裡讀取資料時,為圖簡單,經常用InputStream.read()方法。這個方法是從流裡每次只讀取讀取一個位元組,效率會非常低。     更好的方法是用InputStream.read(byte[] b)或

經緯座標(BLH)資料建立.kml檔案工具設計 Java版

  技術背景      KML,是標記語言(Keyhole Markup Language)的縮寫,最初由Keyhole公司開發,是一種基於XML 語法與格式的、用於描述和儲存地理資訊(如點、線、影象、多邊形和模型等)的編碼規範,可以被 Google Earth 和 Google Maps 識別並顯

從原始碼看Spark讀取Hive表資料檔案和分塊的問題

原文連結:https://mp.csdn.net/postedit/82423831  使用Spark進行資料分析和計算早已成趨勢,你是否關注過讀取一張Hive表時Task數為什麼是那麼多呢?它跟什麼有關係呢? 最近剛好碰到這個問題,而之前對此有些模糊,所以做了些整理,希望大家拍磚探討

Python使用pandas讀取Excel檔案資料和預處理案例

假設有Excel檔案data.xlsx,其中內容為 現在需要將這個Excel檔案中的資料讀入pandas,並且在後續的處理中不關心ID列,還需要把sex列的female替換為1,把sex列的male替換為0。本文演示有關的幾個操作。 (1)匯入pandas模組 >>> import p

python工具___讀取指定檔案中特定字串存入Excel表格

#coding:utf8 import os import os.path import xlwt import xlrd # --- 獲取當前路徑 --- filePath=os.getcwd() # --- 指定測試路徑 --- file01='F:\SVNBalo

java程式讀取檔案獲取檔案有用資訊

import java.util.regex.*; import java.io.*; import java.lang.*; public class GainNumber{ public static void main(String[]args)throws Exception

android讀取csv檔案資料

csv檔案是一種表格形式的檔案,如果把檔案字尾名改為.txt,會發現同一行資料之間是用英文“,”隔開的。 如何讀取csv檔案以便把資料存入資料庫呢,特別是csv檔案中有些資料是空? csv檔案如下: 把檔案字尾名改為.txt後如下: 電錶id,電錶編號,模組地址,描述,所屬站點名稱,

Windows資料夾、檔案原始碼對比工具--WinMerge

/********************************************************************** * Windows資料夾、檔案原始碼對比工具--WinMerge * 說明: * 藍武的程式進行了修改,不過由於他目前沒有使

ubuntu linux下測試實時網路網速流量監控的幾種工具命令方法

總結了ubuntu下常用的網路檢視/監控工具,包括nethogs,ethstatus,bmon,Netspeed。 1. nethogs nethogs可以檢視實時程序網路佔用。  安裝: sudo apt install nethogs  檢視網路狀態: nethogs

TensorFlow讀取二進位制檔案資料到佇列

       TensorFlow是一種符號程式設計框架(與theano類似),先構建資料流圖再輸入資料進行模型訓練。Tensorflow支援很多種樣例輸入的方式。最容易的是使用placeholder,但這需要手動傳遞numpy.array型別的資料。第二

Android與與伺服器交換資料、上傳、下載、讀取檔案

一些變數的定義: //需要將下面的IP改為伺服器端IP private String txtUrl = "http://192.168.1.46:8080/AppServer/SynTxtDataServlet"; private String url = "http://192.

Python資料分析之讀取檔案 python 程式語言

Python的資料分析,大部分的教程都是想講numpy,再講Dataframe,再講讀取檔案。但我看書的時候,前面二章看的實在頭暈,所以,我們還是通過讀取檔案來開始我們的Python資料分析吧。 讀取CSV 讀取csv通過read_csv讀取python程式語言學習QQ群 5152672