程序只打印输入文件的最后一串

时间:2013-09-18 00:33:26

标签: io go

我正在尝试创建一个简单的程序来读取文本文件中的行并将它们打印到golang中的控制台。我花了很多时间浏览我的代码,我简直无法理解为什么只有最后一行被打印到屏幕上。谁能告诉我这里哪里出错了?这里的一切都应该编译运行。

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)
    }
}

1 个答案:

答案 0 :(得分:1)

因此我怀疑问题出在您的tickers.txt文件行结尾。 ReadLine()的文档还表明,对于大多数情况,Scanner更适合。

以下SO问题为替代实施提供了一些有用的信息:reading file line by line in go

然后我使用上面问题中的示例重新实现您的main函数,如下所示:

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)
}