douyinglan2599 2018-11-23 12:12
浏览 39
已采纳

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

I have a txt file :

2
Data 5 1.32
DataSecond 4 5.41
4
...

And so on. How to read the first line to know the count and then go on spliting the other lines to get individual parameters? I tried doing as follows, but it is obviously wrong.

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条回答 默认 最新

  • duan47676379 2018-11-23 12:57
    关注

    You could do something like this, read the single lines into a count int and use it as a test. If count is > 0 then use sscanf to get the other values

    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)
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格