问题内容 是否可以像 C 中那样省略字段 %*s? var pid int fmt.Fscanf(r, "%*s %d", &pid)解决方法实际上,在 Go 中你无法做到这一点(至少
是否可以像 C 中那样省略字段 %*s
?
var pid int
fmt.Fscanf(r, "%*s %d", &pid)
实际上,在 Go 中你无法做到这一点(至少在 Go 1.21.0 上)。
源代码表明:
%*s
):实际上,字符串的动词始终是 单个字符 (% s
、%v
、%q
、%X
或 %X
)Fscanf
方法 迭代参数(a
中的 Fscanf 数组(r io.Reader,格式字符串,a ...any)
)。因此,您必须在 a
中定义一个参数,即使您不关心它的值如果您不想定义变量,可以使用:
var pid int
fmt.Fscanf(r, "%s %d", new(string), &pid)
对于您的具体情况,要解析阅读器中的某些内容,您可以首先将阅读器读入字符串(例如 io.ReadAll
):
然后使用 strings.Split
方法或正则表达式,例如:
strings.Split
pidString := strings.Split(string(s), " ")[1]
pid, err := strconv.Atoi(pidString)
if err != nil {
panic(err) // handle the error
}
re := regexp.MustCompile(`[^\s]+ (?P\d+)`) // similar to "%s %d"
matches := re.FindStringSubmatch(s)
pidString := matches[re.SubexpIndex("pid")]
pid, err := strconv.Atoi(pidString)
if err != nil {
panic(err) // handle the error
}
可能还有其他方法,但这些应该足以说明。希望有帮助。
以上就是Fscanf 并像 C 中那样省略字段的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: Fscanf 并像 C 中那样省略字段
本文链接: https://lsjlt.com/news/563849.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0