我一直在用Go编写此Php解析器,但似乎遇到了一个小问题,那就是有时最后一行没有添加到我正在编写的新文件中。
基本上,我会遍历原始的Php文件,进行一些混淆处理,然后将这些混淆处理的行写入新文件中。
问题是,有时我遇到一个结尾没有换行符的文件,并且我假设line, err := reader.ReadString('\n')
如果结尾没有定界字符,则不会读取字符串吗?< / p>
是否有一个不涉及使用Scanner的简单解决方案,因为很多解析代码都依赖于解释换行符...
答案 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()