比較兩個檔案的差集
阿新 • • 發佈:2021-01-30
比較兩個檔案的差集,並匯出檔案到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,同時釋放緩衝區,以便於下一次資料能完整的寫入緩衝區 } }