Parsing 如果没有换行符,如何从reader.ReadString获取最后一行

Parsing 如果没有换行符,如何从reader.ReadString获取最后一行,parsing,go,Parsing,Go,我一直在用Go编写这个Php解析器,但我似乎遇到了一个小问题,就是有时候最后一行没有添加到我正在编写的新文件中 基本上,我检查原始Php文件,进行一些模糊处理,然后将这些模糊处理的行写入一个新文件 问题是,有时我会遇到一个结尾没有换行符的文件,并且我假设line,err:=reader.ReadString('\n')如果字符串结尾没有定界字符,则不会读取该字符串 有没有一个简单的解决方案不需要使用Scanner,因为很多解析代码都依赖于解释换行符…问题解决了,我在将最后一个字符添加到模糊的行之

我一直在用Go编写这个Php解析器,但我似乎遇到了一个小问题,就是有时候最后一行没有添加到我正在编写的新文件中

基本上,我检查原始Php文件,进行一些模糊处理,然后将这些模糊处理的行写入一个新文件

问题是,有时我会遇到一个结尾没有换行符的文件,并且我假设
line,err:=reader.ReadString('\n')
如果字符串结尾没有定界字符,则不会读取该字符串


有没有一个简单的解决方案不需要使用Scanner,因为很多解析代码都依赖于解释换行符…

问题解决了,我在将最后一个字符添加到模糊的行之前打破了循环。将EOF处理移到底部解决了这个问题。

因为我还不能发表评论,这是我对@Kyle Bridenstine的回答

我用以下脚本(摘录如下)试验了相同的问题:

通过将错误测试从第88行移到第93行,源文件的最后一行以
结尾 }如果不使用新行,则现在可以将字符正确复制到目标文件

bufr := bufio.NewReader(f1)
bufr2 := bufio.NewWriter(f2)
for {
    line, err := bufr.ReadString('\n')
    if strings.Contains(line, searchText) {
        line = strings.Replace(line, searchText, replaceText, -1)
        count++
    }
    bufr2.WriteString(line)
    if err != nil {
        break
    }
}
bufr2.Flush()

“我假设[…]ReadString('\n')不会读取末尾没有定界字符的字符串”。你的假设是错误的。嗯,你说得对。。。那一定是出了什么事。这很奇怪,因为只要我在原始文件的最后一行添加一个换行符,一切正常。你应该提供代码,以便其他人可以引用。我也有同样的问题。