解析百度统计 CSV 日志的系统运行了快一个月,没有出现问题。但是今天早上突然报错退出:
> import_log /mnt/d/to_del/2020-06-20.csv
2020/06/22 07:55:18 parse error on line 686, column 60: extraneous or missing " in quoted-field
对应的 CSV 文件数据行为类似这样的结构,报错点在“烟台”前的一个双引号上。
"515","2020/06/20 13:07:08","烟台 "golang" (www)", "Windows 10"
可见,百度 CSV 文件没有对双引号进行转义。
哪里报错的呢
怎么知道具体是哪行 golang 代码报错的呢?
log.Fatal 是否会导致程序退出
我实际测试 log.Println 并不会导致程序退出,而 log.Fatal 会。
查了一个文档,确实是这样:
log.Fatal is equivalent to Print() followed by a call to os.Exit(1).
那么,很自然的,就会猜测是 log.Fatal 那行导致程序退出。
for {
// Read each record from csv
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
parseRecord(record)
}
忽略此行
for {
// Read each record from csv
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Println(err)
log.Println("Ignore")
} else {
parseRecord(record)
}
}
除了忽略这行数据,还有什么其他方法
因为使用双引号,在搜索时是比较常用的做法,双引号代表必须包含这个关键词。
目前这种忽略的做法,非常不严谨。
// TODO
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式