比较两个文件的差集,并导出文件到difference.txt中:
1.已存在要比较的两个文件,分别为a.txt和b.txt,要找出两文件的差集(属于a.txt但不属于b.txt): 接口3
2.最终输出结果并导入difference.txt文件:
我是利用set包(另外也可以通过map实现),实现如下:
// 比较两个文件API接口的差集,并导出文件到difference.txt中:
func FilterDuplicateData() {
// 打开文件
aFile, err := os.OpenFile("./a.txt", os.O_RDWR, os.ModePerm)
if err != nil {
fmt.Println("a.txt os.OpenFile() error !")
return
}
bFile, err := os.OpenFile("./b.txt", os.O_RDWR, os.ModePerm)
if err != nil {
fmt.Println("b.txt os.OpenFile() error !")
return
}
// 差集比较
aSet := set.New(set.ThreadSafe)
bSet := set.New(set.ThreadSafe)
aReader := bufio.NewReader(aFile)
bReader := bufio.NewReader(bFile)
// read file:
for {
aByteData, _, err := aReader.ReadLine()
if err == io.EOF {
fmt.Println("aReader.ReadLine() error : ", err)
break
}
aSet.Add(string(aByteData))
}
//fmt.Println("aSet:", aSet.String())
for {
bByteData, _, err := bReader.ReadLine()
if err == io.EOF {
fmt.Println("bReader.ReadLine() error : ", err)
break
}
bSet.Add(string(bByteData))
}
//fmt.Println("bSet:", bSet.String())
differenceResult := set.Difference(aSet, bSet) //
fmt.Println("差集(属前者不属后者):\n", differenceResult)
// 导入结果到新文件:
cFile, err := os.OpenFile("./difference.txt", os.O_CREATE | os.O_RDWR, os.ModePerm)
if err != nil {
fmt.Println("a.txt os.OpenFile() error !")
return
}
writer := bufio.NewWriter(cFile)
for _, val := range differenceResult.List() {
strData, ok := val.(string)
if !ok {
fmt.Println("type assert error !")
return
}
//fmt.Println("---", strData)
_, err = writer.WriteString(strData + "\n")
if err != nil {
fmt.Println("writer.WriteString error : ", err)
return
}
writer.Flush() // 刷新会将所有缓冲的数据写入基础io.Writer,同时释放缓冲区,以便于下一次数据能完整的写入缓冲区
}
}