golang:逐行读取 int 字符串的文本文件

我正在处理一个包含整数列表作为字符串的输入文件


10

..

我选择使用ReadString('\n')方法逐行阅读


以下代码


line, error := inputReader.ReadString('\n')

lineStr := string(line)

控制台输出(长度和值)


lineStr %v 4

lineStr %v 10

lineStr 长度为“4”,可能是因为符文编码。


然后我尝试了几种方法将它转换为简单的整数,但没有成功。


例1


num, _ := strconv.ParseUint(lineStr, 0, 64)

输出数字 0(应该是 10)


例2


num, _ := strconv.Atoi(lineStr)

输出数字 0(应该是 10)


例3


num, _ := strconv.Atoi("10")

输出数量为 10 (ok)


Ex4


num, _ := strconv.ParseUint("10", 0, 64)

输出数量为 10 (ok)


文字中的字符串没问题,但文件中的字符串不起作用,有什么问题?


提前致谢


喵喔喔
浏览 323回答 3
3回答

开满天机

来自文档:“ReadString 读取直到输入中第一次出现 delim,返回一个包含数据的字符串,直到并包括分隔符。”因此,我建议您使用扫描仪,它可以像您期望的那样处理这种情况:scanner := bufio.NewScanner(file)for scanner.Scan() {    lineStr := scanner.Text()    num, _ := strconv.Atoi(lineStr)    fmt.Println(lineStr, num)}

ABOUTYOU

引用bufio.Reader.ReadString的文档(强调我的):ReadString 读取直到输入中第一次出现 delim ,返回一个包含数据的字符串,直到并包括 delimiter。现在,strconv.ParseInt的文档ParseInt 返回的错误具有具体类型 *NumError 并包括 err.Num = s。如果 s 为空或包含无效数字,则 err.Err = ErrSyntax 返回值为 0您的问题是该ReadString方法还返回\n终止该行的 ,这是该ParseInt函数的无效字符。您可以使用以下代码段检查真正的错误i, err := strconv.ParseInt(line, 10, 64)if err != nil {    switch err.(*strconv.NumError).Err {        case strconv.ErrSyntax:            fmt.Println("syntax error")        case strconv.ErrRange:            fmt.Println("out of range value")    }}建议:用于strings.TrimSpace清理您的输入。

慕婉清6462132

如果您查看文档,ReadString您会注意到string返回的将包含分隔符(在您的情况下\n)。ReadString 读取直到输入中第一次出现 delim 为止,返回一个包含数据的字符串,直到并包括分隔符。并且因为读取 10 后的行长度为 4,所以我假设这些行由\r\n. 删除它的最简单方法是使用其中一个Trim函数(如TrimSpace)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go