Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Go中将整型字符串转换为数组?_Arrays_Go - Fatal编程技术网

Arrays 如何在Go中将整型字符串转换为数组?

Arrays 如何在Go中将整型字符串转换为数组?,arrays,go,Arrays,Go,我在任何地方都找不到这个(或者我就是不明白)。我正在从一个以空格分隔的文件中读取数字列表。也就是说,该文件看起来像“1 4 0 0 2 5…等”,我希望它是一个数组的形式(或者,最好是一个二维数组,其中每个新行也分开)。我该怎么做呢 这是我到目前为止所拥有的代码——很多代码都是从我找到的教程中获取的,所以我并不完全理解所有代码。它可以很好地读入文件,并返回一个字符串。 附带问题:当我打印字符串时,我在输出的末尾得到:%!(额外) 有人知道如何解决这个问题吗?我假设它将最后一个nil字符放在返回字

我在任何地方都找不到这个(或者我就是不明白)。我正在从一个以空格分隔的文件中读取数字列表。也就是说,该文件看起来像“1 4 0 0 2 5…等”,我希望它是一个数组的形式(或者,最好是一个二维数组,其中每个新行也分开)。我该怎么做呢

这是我到目前为止所拥有的代码——很多代码都是从我找到的教程中获取的,所以我并不完全理解所有代码。它可以很好地读入文件,并返回一个字符串。 附带问题:当我打印字符串时,我在输出的末尾得到:%!(额外) 有人知道如何解决这个问题吗?我假设它将最后一个nil字符放在返回字符串中,但我不知道如何解决这个问题

package main
import (
  "fmt"
  "os"
)

func read_file(filename string) (string, os.Error) {
  f, err := os.Open(filename)
  if err != nil {
    return "", err
  }
  defer f.Close()  // f.Close will run when we're finished.

  var result []byte
  buf := make([]byte, 100)
  for {
    n, err := f.Read(buf[0:])
    result = append(result, buf[0:n]...) // append is discussed later.
    if err != nil {
      if err == os.EOF {
        break
      }
    return "", err  // f will be closed if we return here.
    }
  }
  return string(result), nil // f will be closed if we return here.
}

func print_board() {

}

func main() {
 fmt.Printf(read_file("sudoku1.txt")) // this outputs the file exactly, 
                                      // but with %!(EXTRA <nil>) at the end. 
                                      // I do not know why exactly
}
主程序包
进口(
“fmt”
“操作系统”
)
func read_文件(文件名字符串)(字符串,os.Error){
f、 错误:=os.Open(文件名)
如果错误!=零{
返回“”,错误
}
延迟f.Close()//f.Close将在完成后运行。
var结果[]字节
buf:=make([]字节,100)
为了{
n、 错误:=f.Read(buf[0:])
result=append(result,buf[0:n]…)//后面将讨论append。
如果错误!=零{
如果err==os.EOF{
打破
}
返回“”,如果我们返回此处,错误//f将关闭。
}
}
返回字符串(result),如果我们返回这里,nil//f将被关闭。
}
func打印板(){
}
func main(){
fmt.Printf(read_file(“sudoku1.txt”)//这会准确地输出文件,
//但最后加了%!(额外)。
//我不知道确切的原因
}
非常感谢您能提供的任何帮助


-W

您可以使用strings包将字符串转换为二维整数数组。解释这里使用的一些语言结构有点超出了这个问题的范围,但请随时要求澄清任何问题

// read_file also returns an error!
s, err := read_file("sudoku1.txt")
if err != nil {
    panic(err.String())
}

// split into rows at newlines
rows := strings.Split(s, "\n")
board := make([][]int, len(rows))
for i, row := range rows {
    // extract all whitespace separated fields
    elems := strings.Fields(row)
    board[i] = make([]int, len(elems))
    for j, elem := range elems {
        var err os.Error
            // convert each element to an integer
        board[i][j], err = strconv.Atoi(elem)
        if err != nil {
            panic(err.String())
        }
    }
}
fmt.Println(board)
之所以使用
%(!EXTRA)
,是因为read\u文件返回两个值,第二个值是一个错误(在本例中为零)。Printf尝试将第二个值与字符串中的插槽匹配。由于字符串不包含任何格式槽(%v,%d,%s…),Printf确定它是一个额外的参数,并在输出中这样说


请注意,包ioutil已经提供了ReadFile函数,它将为您提供一个[]字节而不是字符串,但在其他方面与您的read_文件功能相同。

非常感谢,这非常有帮助。我对这门语言的理解好多了。