3 回答
TA贡献1859条经验 获得超6个赞
看来您的问题是parts[0]
包含字符串"0 \r1 \r2 \r3 \r4 \r5 \r6"
而不是数字。
strconv.Atoi 函数只寻找一个要解析的数字 - 我假设您在这种情况下试图获得第一个“0”。如果是这样,问题是这段代码:strings.Split(string(out), "\n")
只寻找“\n”而不是“\r”,这显然是从osx_fukyobrane_amd64
.
一种解决方案是像这样拆分行:
regexp.MustCompile(`[\r\n]+`).Split(parts[0], -1)
这会将多行合并为一行,并将 \r、\n 和 \r\n(或其他奇怪的组合)视为有效的换行符。
TA贡献1830条经验 获得超9个赞
使用strings.Fields代替Split,它会自动处理\n和\r。
这也比使用 regexp 快得多,后者在 Go 中相当慢,尽管它正在得到改进。
func splitAndTrim(line string) []string {
out := strings.Fields(line)
for i, s := range out {
out[i] = strings.TrimSpace(s)
}
return out
}
TA贡献1796条经验 获得超10个赞
看起来那条线上可能有一些额外的转义数据。尝试按空间分割并使用它。
out, _ := exec.Command(pwd+"/osx_fukyobrane_amd64", "fyb_src/"+filename, "fyb_src/salty.fyb", "t").CombinedOutput()
parts := strings.Split(string(out), "\n")
parts = strings.Split(parts, " ")
fmt.Println(parts[0])
rounds, err := strconv.Atoi(strings.TrimSpace(parts[0]))
if err != nil {
panic(err.Error())
}
- 3 回答
- 0 关注
- 203 浏览
添加回答
举报