目前,我正在尝试从Go程序中运行一个命令,并从响应中解析一个整数。该命令返回的输出如下:
6 fyb_src/ex1.fyb (1)获胜!
用strings.Split和strings.TrimSpaces分割行并删除空白可以很好地工作。但是,在尝试将数字解析为整数时,我会得到以下错误:
strconv.ParseInt:解析"0 \r1 \r2 \r3 \r4 \r5 \r6":无效语法
但是,将我试图解析的字符串打印到终端会产生以下结果:
6
我不太确定从这里往哪里走。这个数字在我看来显然是个整数。错误信息也没有用(至少对我是这样)。有谁有主意吗?
编辑:我正在运行的代码
out, _ := exec.Command(pwd+"/osx_fukyobrane_amd64", "fyb_src/"+filename, "fyb_src/salty.fyb", "t").CombinedOutput()
parts := strings.Split(string(out), "\n")
fmt.Println(parts[0])
rounds, err := strconv.Atoi(strings.TrimSpace(parts[0]))
if err != nil {
panic(err.Error())
}发布于 2016-06-10 22:23:33
您的问题似乎是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 (或其他奇怪的组合)视为有效的换行。
发布于 2016-06-10 22:22:17
看起来这一行上可能有一些额外的转义数据。试着按空间分裂并利用它。
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())
}https://stackoverflow.com/questions/37757683
复制相似问题