首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从exec.Command输出解析整数

从exec.Command输出解析整数
EN

Stack Overflow用户
提问于 2016-06-10 21:57:45
回答 2查看 1K关注 0票数 0

目前,我正在尝试从Go程序中运行一个命令,并从响应中解析一个整数。该命令返回的输出如下:

6 fyb_src/ex1.fyb (1)获胜!

strings.Splitstrings.TrimSpaces分割行并删除空白可以很好地工作。但是,在尝试将数字解析为整数时,我会得到以下错误:

strconv.ParseInt:解析"0 \r1 \r2 \r3 \r4 \r5 \r6":无效语法

但是,将我试图解析的字符串打印到终端会产生以下结果:

6

我不太确定从这里往哪里走。这个数字在我看来显然是个整数。错误信息也没有用(至少对我是这样)。有谁有主意吗?

编辑:我正在运行的代码

代码语言:javascript
复制
    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())
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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返回的内容。

一种解决方案是将行拆分成这样:

代码语言:javascript
复制
regexp.MustCompile(`[\r\n]+`).Split(parts[0], -1)

这将将多行合并为一个,并将\r、\n和\r\n (或其他奇怪的组合)视为有效的换行。

票数 1
EN

Stack Overflow用户

发布于 2016-06-10 22:22:17

看起来这一行上可能有一些额外的转义数据。试着按空间分裂并利用它。

代码语言:javascript
复制
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())
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37757683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档