如何使用golang读取数据文件?

时间:2018-11-23 12:12:26

标签: go

我有一个txt文件:

2
Data 5 1.32
DataSecond 4 5.41
4
...

以此类推。如何读取第一行以了解计数,然后继续拆分其他行以获得单独的参数?我尝试执行以下操作,但这显然是错误的。

f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
    line := s.Text()
    count, err := strconv.Atoi(line)
    check(err)
    for i := 0; i < count; i++ {
        testArray := strings.Fields(s.Text())
        for _, v := range testArray {
            fmt.Println(v)
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您只是忘记了内循环内的Scan()

f, err := os.Open("DATA.txt")
check(err)
s := bufio.NewScanner(f)
for s.Scan() {
    line := s.Text()
    count, err := strconv.Atoi(line)
    check(err)
    for i := 0; i < count && s.Scan(); i++ {
        testArray := strings.Fields(s.Text())
        for _, v := range testArray {
            fmt.Println(v)
        }
    }
}

答案 1 :(得分:0)

您可以执行以下操作,将单行读入count int 并将其用作测试。如果count> 0,则使用sscanf获取其他值

func main() {
    f, err := os.Open("DATA.txt")
    check(err)
    s := bufio.NewScanner(f)
    count := 0
    for s.Scan() {
        line := s.Text()
        if count < 1 {
            count, err = strconv.Atoi(line)
            check(err)
            continue
        }
        count--
        var tag string
        var n int
        var f float64
        fmt.Sscanf(line, "%s %d %f", &tag, &n, &f)
        // not sure what you really wnant to do with the data!
        fmt.Println(n, f, tag)
    }
}