【问题标题】:How to read a data file using golang?如何使用 golang 读取数据文件?
【发布时间】:2018-11-23 12:12:26
【问题描述】:

我有一个 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)
        }
    }
}

【问题讨论】:

标签: go


【解决方案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)
        }
    }
}

【讨论】:

    【解决方案2】:

    你可以这样做,将单行读入 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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多