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

时间:2018-09-12 08:05:41

标签: parsing go

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

基本上,我会遍历原始的Php文件,进行一些混淆处理,然后将这些混淆处理的行写入新文件中。

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

是否有一个不涉及使用Scanner的简单解决方案,因为很多解析代码都依赖于解释换行符...

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我用以下脚本试验了同样的问题(摘录如下): https://github.com/setsuna-/golang/blob/master/mass_replace.go

通过将错误测试从第 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()