使用fmt.Fscanf函数从字符串中读取格式化的数据并赋值给变量,直到遇到指定分隔符

介绍

在Go语言中,有时需要从输入数据中读取格式化的数据,fmt包中的Fscanf函数可以帮助我们实现这一目标。Fscanf函数是Read和Scanf之间的折中,可以从字符串(例如来自网络)和文件中读取格式化的数据。

func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

该函数从io.Reader中读取数据并进行格式化,将结果存储在提供的参数中。返回值n是读取的项目数量(例如,如果遇到了一个错误,将为0),err是读取时遇到的任何错误(EOF除外)。

函数格式

Fscanf函数的格式字符串与C语言函数scanf的格式字符串相似。以下是一些示例格式说明符:

字符串

%s 读取到第一个空格为止的字符串

%q 读取到第一个空格为止的字符串,并将结果更改为双引号引用的转义字符串

整数

%d 读取一系列数字字符(可能带负号)并将其解释为十进制整数

%x、%o 和 %b 读取数字并将其解释为十六进制、八进制和二进制整数

%v 读取一系列数字字符,并将其解释为所需的十进制、十六进制、八进制或二进制整数

浮点数

%f 读取由十进制符号、整数和小数点组成的浮点数

%g 读取任意浮点数

指针和宽度

%p 读取指针地址

%*d 忽略一个整数

%2d 读取两个数字而不是一个

使用方法

使用Fscanf函数从字符串中读取格式化的数据并赋值给变量,直到遇到指定分隔符。下面是使用Fscanf实现的一个例子,读取一组逗号分隔的浮点数:

package main

import (

"fmt"

"strings"

)

func main() {

input := "0.1, 0.2, 0.3, 0.4, 0.5,"

var nums []float64

temperature := 0.6

for {

var n float64

_, err := fmt.Fscanf(strings.NewReader(input), "%f,", &n)

if err != nil {

break

}

nums = append(nums, n*temperature)

fmt.Printf("Read number: %f\n", n)

}

fmt.Println(nums)

}

上述程序会输出以下结果:

Read number: 0.100000

Read number: 0.200000

Read number: 0.300000

Read number: 0.400000

Read number: 0.500000

[0.06 0.12 0.18 0.24 0.3]

该程序从字符串input中读取数据,并使用格式字符串"%f,"读取逗号分隔的浮点数。读取的结果存储在nums切片中,可以使用Fprintf函数将其输出到控制台。在本例中,我们还使用了一个名为temperature的变量,将读取到的每个数字乘以0.6。

注意事项

以下是使用Fscanf时应该注意的一些事项:

格式化字符串顺序

Fscanf函数使用格式字符串指定要读取的项目及其顺序。如果格式不符合输入数据,则可能会导致意外的结果。在指定格式字符串时,请确保它与输入数据相匹配。

指定分隔符

Fscanf读取到分隔符时,会停止读取并将读取的数据添加到提供的变量中。例如,格式字符串"%s,"将读取到逗号分隔符时停止读取。

EOF错误

使用Fscanf函数时,如果遇到EOF错误,那么它将不会输出该错误,因此您需要记得检查要处理的数据总长度并在到达结尾时处理EOF错误,否则可能会出现意外的结果。

总结

fmt包中的Fscanf函数提供了一种从字符串中读取格式化数据的方法。使用该函数时,请确保格式字符串与输入数据相匹配,并且注意指定分隔符。如果遇到EOF错误,请确保处理它。该函数可以用于读取许多不同的数据类型,并且是实现读取文件和其他输入数据时一种很方便的之间方案。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签