接到一个任务,将类似如下图中的十万条数据:
-
格式:
本地接收时间 [编号] 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 }
-
结果:
来源:CSDN
作者:小丽吖
链接:https://blog.csdn.net/lili9415/article/details/104008023