登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-14 12:24:28 202浏览 收藏

从现在开始,努力学习吧!本文《如何使用golang读取数据文件?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

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

解决方案


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

您只是忘记在内循环中使用 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)
        }
    }
}

理论要掌握,实操不能落!以上关于《如何使用golang读取数据文件?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>