从Go中解析文件中的矩阵

我有一个包含以下内容的文件:


 1  2  3  4  5

 6  0  0  0  7

 8  0  0  0  9

10  0  0  0 11

12 13 14 15 16

我想要的是的多维数组(或切片)[][]int。我试图摆弄scanner.Scanner图书馆:


scan.Init(f) // f is a file

scan.Whitespace = 1<<'\t' | 1<<'\r' | 1<<' '

tok := scan.Scan()

for tok != scanner.EOF {

    // do something with tok

    if tok == scanner.String {

        fmt.Print("\n")

    } else if tok == scanner.Int {

        // Handle int value

        // How do I get the matched token value?

    }       


    tok = scan.Scan()

}

我找不到一种方法来获取匹配的令牌的值。


有两个问题:


我如何获得任何已扫描令牌的价值?

在知道二维切片/数组的确切大小之前,如何动态创建该二维切片/数组?(实际上可以是任何大小)


慕莱坞森
浏览 210回答 2
2回答

不负相思意

我不会使用扫描程序包(适用于解析上下文无关的语法,类似于Go语言)来完成从文件中读取数字的简单任务。我要么使用:一个简单的循环和fmt.Fscan,或ioutil.ReadFile,strings.Split和strconv.Atoi在知道二维切片/数组的确切大小之前,如何动态创建该二维切片/数组?(实际上可以是任何大小)你不能&nbsp;读取文件两次以了解第二遍的确切大小,或者仅使用append动态调整切片的基础数组的大小。append()多次调用还会导致摊销O(n)行为,因此这不是问题。

墨色风雨

广告1:Scanner.TokenText广告2:简短-如果要从文本表示中推断出暗淡,请进行内部循环:附加到行切片(例如[] int),直到换行-> num of mx cols。外循环:将这些线段附加到[] [] int上,直到EOF->数量的mx行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go