从文件中读取数据,计算时间差并记录到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. 结果:
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值