比较 CSV 和差异的结论

我开始编写一个程序来比较两个CSV文件。阅读文档后,我找到了一个解决方案,我无法弄清楚如何打印与第二个文件的差异,因为函数返回true/false


package main


import (

    "encoding/csv"

    "fmt"

    "os"

    "reflect"

)


func main() {

    file, err := os.Open("sms_in_max.csv")

    if err != nil {

        fmt.Println(err)

    }

    reader := csv.NewReader(file)

    records, _ := reader.ReadAll()

    fmt.Println(records)

    file2, err := os.Open("sms_out.csv")

    if err != nil {

        fmt.Println(err)

    }

    reader2 := csv.NewReader(file2)

    records2, _ := reader2.ReadAll()

    fmt.Println(records2)

    allrs :=reflect.DeepEqual(records, records2)

    fmt.Println(allrs)

}


侃侃尔雅
浏览 75回答 1
1回答

UYOU

csv 读入() 函数返回行的切片,其中行是列的切片。我们可以遍历行,并在一行中再次循环遍历列并比较每个列值。下面是打印所有行及其行号上存在差异的代码。package mainimport (    "encoding/csv"    "fmt"    "os")func main() {    file, err := os.Open("sms_in_max.csv")    if err != nil {        fmt.Println(err)    }    reader := csv.NewReader(file)    records, _ := reader.ReadAll()    fmt.Println(records)    file2, err := os.Open("sms_out.csv")    if err != nil {        fmt.Println(err)    }    reader2 := csv.NewReader(file2)    records2, _ := reader2.ReadAll()    fmt.Println(records2)    // allrs := reflect.DeepEqual(records, records2)    // fmt.Println(allrs)    // Prints lines at which there is difference    for i := range records {        diff := false        for j := range records[i] {            if records[i][j] != records2[i][j] {                diff = true                break            }        }        if diff {            fmt.Printf("Line %d: %v, %v\n", i+1, records[i], records2[i])        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go