使用fmt.Fscanf函数从字符串中读取格式化的数据并赋值给变量,直到遇到指定分隔符
使用fmt.Fscanf函数从字符串中读取格式化的数据并赋值给变量,直到遇到指定分隔符
在Go语言的fmt包中,提供了一系列的输入和输出函数,其中包括用于格式化输入的函数fmt.Fscanf。通过使用该函数,可以从一个字符串中按照指定的格式读取数据,并将其赋值给相应的变量。
首先,让我们来看一个简单的示例。
package main
import (
"fmt"
"strings"
)
func main() {
str := "42 3.14 Go"
var num int
var pi float64
var lang string
_, err := fmt.Fscanf(strings.NewReader(str), "%d %f %s", &num, &pi, &lang)
if err != nil {
fmt.Printf("格式化输入错误:%s
", err)
return
}
fmt.Printf("num: %d
", num)
fmt.Printf("pi: %f
", pi)
fmt.Printf("lang: %s
", lang)
}
在上面的代码中,我们定义了一个字符串str,其中包含了一个整数、一个浮点数和一个字符串,以空格分隔。
接下来,我们使用fmt.Fscanf函数从这个字符串中按照指定的格式读取数据,并将结果赋值给对应的变量。
在本例中,我们分别定义了num、pi和lang三个变量来接收读取到的数据。我们通过传递它们的内存地址(使用&操作符)作为参数,来使得fmt.Fscanf能够将读取到的值存储到相应的变量中。
%格式化字符串指定了我们期望读取的数据类型。在本例中,%d表示一个整数,%f表示一个浮点数,%s表示一个字符串。
注意到,我们使用了strings.NewReader函数将字符串str包装成一个io.Reader接口的实现,以便于传递给fmt.Fscanf函数。这样做是因为fmt.Fscanf函数需要一个io.Reader类型的参数,而它可以从任何实现了该接口的类型中读取数据。
最后,我们通过检查err变量,来判断读取是否成功。如果err不为nil,说明发生了格式化输入错误。
如果一切正常,我们就可以打印出读取到的值。
在上面的代码中,我们使用fmt.Printf函数打印了num、pi和lang的值。你可以根据自己的需求来对这些值进行处理。
综上所述,通过使用fmt.Fscanf函数,我们可以方便地从一个字符串中读取格式化的数据,并将其赋值给相应的变量。这对于处理用户输入、解析文件数据等场景非常有用。不同的格式化字符串可以用于指定不同的数据类型。需要注意的是,读取过程中遇到指定的分隔符时会停止读取,并将剩余的数据留在输入流中。
相关文章