從文件中讀取數據,計算時間差並記錄到excel表格中

接到一個任務,將類似如下圖中的十萬條數據:
在這裏插入圖片描述

  1. 格式:
    本地接收時間 [編號] Recived on [hello]: ‘發送的消息|發送時間|test’

  2. 要求:
    計算出每兩條的時間差,接收時間與發送時間的時間差

  3. 思路:
    創建excel—>讀取文件—>取出接收時間和發送時間—>進行比較

  4. 代碼實現:

    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
    }
    
    
  5. 結果:
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章