Io 程序只打印输入文件的最后一个字符串
我试图创建一个简单的程序来读取文本文件中的行,并将它们打印到golang中的控制台。我花了很多时间检查我的代码,我简直不明白为什么只有最后一行被打印到屏幕上。有人能告诉我哪里出了问题吗?这里的一切都应该编译并运行Io 程序只打印输入文件的最后一个字符串,io,go,Io,Go,我试图创建一个简单的程序来读取文本文件中的行,并将它们打印到golang中的控制台。我花了很多时间检查我的代码,我简直不明白为什么只有最后一行被打印到屏幕上。有人能告诉我哪里出了问题吗?这里的一切都应该编译并运行 package main import ( "bufio" "fmt" "os" ) func Readln(r *bufio.Reader) (string, error) { var ( isPrefix bool = true
package main
import (
"bufio"
"fmt"
"os"
)
func Readln(r *bufio.Reader) (string, error) {
var (
isPrefix bool = true
err error = nil
line, ln []byte
)
for isPrefix && err == nil {
line, isPrefix, err = r.ReadLine()
ln = append(ln, line...)
}
return string(ln), err
}
func main() {
f, err := os.Open("tickers.txt")
if err != nil {
fmt.Printf("error opening file: %v\n", err)
os.Exit(1)
}
r := bufio.NewReader(f)
s, e := Readln(r)
for e == nil {
fmt.Println(s)
s, e = Readln(r)
}
}
因此,我怀疑问题出在您的
tickers.txt
文件行结尾。ReadLine()的文档还表明,在大多数情况下,扫描仪更适合
以下问题提供了一些关于替代实施的有用信息:
然后,我使用上述问题中的示例重新实现您的主要功能,如下所示:
f, err := os.Open("tickers.txt")
if err != nil {
fmt.Printf("error opening file: %v\n", err)
os.Exit(1)
}
scanner := bufio.NewScanner(f)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
}
你能提供更多关于你看到的问题的信息吗?我下载并运行了你的程序,它的行为似乎与我提供的数据相符。我有一个大约100个字符串的文本文件,只有文本文件的最后一行显示在控制台上。我想把文本文件复制到屏幕上。相反,只显示最后一个字符串。文件中的行尾字符是什么?您可以使用查看实际的文件编码,然后将其添加到您的问题中,这将有助于其他人测试它。您确定这一点吗?我调整了海报的程序,添加了一些额外的调试输出,它肯定会逐行读取文件。当我将缓冲区调整为比我拥有的行短时,
isPrefix
部分似乎工作正常:如果返回的是部分行,而不是最后一行,则设置为true。@JamesHenstridge,你是对的,我在添加调试时已经编辑了示例。所以它是逐行阅读。编辑了我的答案。