gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:05:13 24 4
gpt4 key购买 nike

我需要将一个整数文件读入一个数组。我有它的工作:

package main

import (
"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 只是:

1
2
3
...

ReadFile() 似乎太长(可能是因为错误处理)。

是否有更短/更惯用的 Go 加载文件方式?

最佳答案

使用 bufio.Scanner 让事情变得更好。我还使用了 io.Reader 而不是使用文件名。这通常是一种很好的技术,因为它允许在任何类文件对象上使用代码,而不仅仅是磁盘上的文件。这里是从字符串中“读取”。

package main

import (
"bufio"
"fmt"
"io"
"strconv"
"strings"
)

// ReadInts reads whitespace-separated ints from r. If there's an error, it
// returns the ints successfully read so far as well as the error value.
func ReadInts(r io.Reader) ([]int, error) {
scanner := bufio.NewScanner(r)
scanner.Split(bufio.ScanWords)
var result []int
for scanner.Scan() {
x, err := strconv.Atoi(scanner.Text())
if err != nil {
return result, err
}
result = append(result, x)
}
return result, scanner.Err()
}

func main() {
tf := "1\n2\n3\n4\n5\n6"
ints, err := ReadInts(strings.NewReader(tf))
fmt.Println(ints, err)
}

关于Golang,有没有更好的方法将整数文件读入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com