为了账号安全,请及时绑定邮箱和手机立即绑定

Golang,有没有更好的方法将整数文件读入数组?

Golang,有没有更好的方法将整数文件读入数组?

Go
斯蒂芬大帝 2021-04-30 08:37:21
我需要将整数文件读入数组。我有与此一起工作:package mainimport (    "fmt"    "io"    "os")func readFile(filePath string) (numbers []int) {    fd, err := os.Open(filePath)    if err != nil {        panic(fmt.Sprintf("open %s: %v", filePath, err))    }    var line int    for {        _, err := fmt.Fscanf(fd, "%d\n", &line)        if err != nil {            fmt.Println(err)            if err == io.EOF {                return            }            panic(fmt.Sprintf("Scan Failed %s: %v", filePath, err))        }        numbers = append(numbers, line)    }    return}func main() {    numbers := readFile("numbers.txt")    fmt.Println(len(numbers))}文件numbers.txt只是:123...ReadFile() 似乎太长了(可能是由于处理错误)。是否有更短/更多的Go惯用方式加载文件?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

我会这样:


package main


import (

"fmt"

    "io/ioutil"

    "strconv"

    "strings"

)


// It would be better for such a function to return error, instead of handling

// it on their own.

func readFile(fname string) (nums []int, err error) {

    b, err := ioutil.ReadFile(fname)

    if err != nil { return nil, err }


    lines := strings.Split(string(b), "\n")

    // Assign cap to avoid resize on every append.

    nums = make([]int, 0, len(lines))


    for i, l := range lines {

        // Empty line occurs at the end of the file when we use Split.

        if len(l) == 0 { continue }

        // Atoi better suits the job when we know exactly what we're dealing

        // with. Scanf is the more general option.

        n, err := strconv.Atoi(l)

        if err != nil { return nil, err }

        nums = append(nums, n)

    }


    return nums, nil

}


func main() {

    nums, err := readFile("numbers.txt")

    if err != nil { panic(err) }

    fmt.Println(len(nums))

}


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信