问题描述
我正在处理一个包含整数列表作为字符串的输入文件
10..
我选择逐行阅读 ReadString('\ n')方法
以下代码
行,错误:= inputReader.ReadString('\ n')lineStr:=字符串(行)
控制台输出(长度和值)
lineStr%v 4lineStr%v 10
lineStr的长度为"4",可能是由于符文编码.
然后我尝试了几种方法将其转换为简单的整数,但没有成功.
Ex1
num,_:= strconv.ParseUint(lineStr,0,64)
输出数字0(应为10)
Ex2
num,_:= strconv.Atoi(lineStr)
输出数字0(应为10)
Ex3
num,_:= strconv.Atoi("10")
输出10(确定)
Ex4
num,_:= strconv.ParseUint("10",0,64)
输出10(确定)
字面意义上的字符串可以,但是文件中的字符串不起作用,这是怎么回事?
预先感谢
从文档:"ReadString读取直到输入中第一次出现delim为止,返回一个字符串,其中包含直到定界符(包括定界符)的数据."
因此,我建议您使用扫描仪,该扫描仪可以像您期望的那样处理这种情况:
scanner:= bufio.NewScanner(文件)用于扫描仪.Scan(){lineStr:= Scanner.Text()num,_:= strconv.Atoi(lineStr)fmt.Println(lineStr,num)}
I am dealing with an input file containing a list of integers as a string
10
..
I have choosen to read it line by line with ReadString('\n') method
The following code
line, error := inputReader.ReadString('\n')
lineStr := string(line)
console output (length and value)
lineStr %v 4
lineStr %v 10
lineStr as a length of "4", maybe because of rune encoding.
Then I have tried several way to convert it to simple integer but with no success.
Ex1
num, _ := strconv.ParseUint(lineStr, 0, 64)
ouputs a num of 0 (should be 10)
Ex2
num, _ := strconv.Atoi(lineStr)
ouputs a num of 0 (should be 10)
Ex3
num, _ := strconv.Atoi("10")
ouputs a num of 10 (ok)
Ex4
num, _ := strconv.ParseUint("10", 0, 64)
ouputs a num of 10 (ok)
string in literal are ok but string from file do not work, what is wrong ?
thanks in advance
From the documentation: "ReadString reads until the first occurrence of delim in the input, returning a string containing the data up to and including the delimiter."
Because of this, i suggest you use a scanner, which handles this case like you would expect:
scanner := bufio.NewScanner(file)
for scanner.Scan() {
lineStr := scanner.Text()
num, _ := strconv.Atoi(lineStr)
fmt.Println(lineStr, num)
}
这篇关于golang:逐行读取int字符串的文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!