接到一個任務,將類似如下圖中的十萬條數據:
-
格式:
本地接收時間 [編號] Recived on [hello]: ‘發送的消息|發送時間|test’ -
要求:
計算出每兩條的時間差,接收時間與發送時間的時間差 -
思路:
創建excel—>讀取文件—>取出接收時間和發送時間—>進行比較 -
代碼實現:
package main import ( "bufio" "fmt" "github.com/360EntSecGroup-Skylar/excelize" "io" "os" "strings" "time" ) func main() { //創建一個excel表格 xlsx := excelize.NewFile() index := xlsx.NewSheet("Sheet1") cate := map[string]string{"A1": "編號", "B1": "發送時間", "C1": "接收時間", "D1": "接收時間每兩次時間差", "E1": "發送和接收的時間差"} for k, v := range cate { xlsx.SetCellValue("Sheet1", k, v) } sendTime, n := send(xlsx) UnixTime1 := sub1(xlsx) Row := 2 for i := 0; i < n; i++ { E := UnixTime1[i] - sendTime[i] //用接收的時間戳減去發送的時間戳==>發送和接收的時間差 rowStr := fmt.Sprintf("%d", Row) xlsx.SetCellValue("Sheet1", "E"+rowStr, E) //發送和sub1時間差 Row++ } xlsx.SetActiveSheet(index) // 按給定路徑保存xlsl文件 err := xlsx.SaveAs("./sub2.xlsx") if err != nil { fmt.Println(err) } } //發送的時間 func send(xlsx *excelize.File) (sendTime []int64, count int) { //打開文件 file, err := os.Open("D:/log_sub5.txt") if err != nil { fmt.Println("open file err=", err) } defer file.Close() reader := bufio.NewReader(file) //從excel的第二行開始,第一行是表頭 rowID := 2 for { str, err := reader.ReadString('\n') if err == io.EOF { break } timeArr := strings.Split(str, "|") T, _ := time.Parse("2006/01/02 15:04:05", timeArr[2]) sendTime = append(sendTime, T.UnixNano()) //將計算的發送時間的納秒放到sendTime切片中 idxStr := fmt.Sprintf("%d", rowID) //文件有多少條數據 count++ xlsx.SetCellValue("Sheet1", "A"+idxStr, count) xlsx.SetCellValue("Sheet1", "B"+idxStr, timeArr[2]) rowID = rowID + 1 } return } //接收時間 func sub1(xlsx *excelize.File) (UnixTime1 []int64) { file, err := os.Open("D:/log_sub5.txt") if err != nil { fmt.Println("open file err=", err) } defer file.Close() reader := bufio.NewReader(file) rowID := 2 var count int for { str, err := reader.ReadString('\n') if err == io.EOF { break } timeArr := strings.Split(str, " [") T, _ := time.Parse("2006/01/02 15:04:05", timeArr[0]) UnixTime1 = append(UnixTime1, T.UnixNano()) idxStr := fmt.Sprintf("%d", rowID) count++ xlsx.SetCellValue("Sheet1", "C"+idxStr, timeArr[0]) rowID = rowID + 1 } Row := 2 //注意:數組溢出問題 for i := 0; i < count-1; i++ { n := UnixTime1[i+1] - UnixTime1[i] //讓後一行減去前一行的時間戳==>時間差 rowStr := fmt.Sprintf("%d", Row) xlsx.SetCellValue("Sheet1", "D"+rowStr, n) Row++ } return }
-
結果: