|
1
2
答案如下:
我找到了一个
StreamRegex-Class
可以做我想要的。
这样就不需要加载完整的文件——或者至少减少了在内存中加载完整文件的机会……
|
|
|
2
1
regex不是一个好方法,尤其是对于这些大量的文本来说。 创建一个自己的小解析器:
这将为您提供注释块的所有起始和结束偏移量。现在,您应该能够通过创建一个临时文件并将文本从原始文件写入临时文件来替换它们(当然,如果您在注释块中,还可以写入其他内容)。 编辑:2Gib的源文件?? |
|
3
0
也许您可以一次加载两行(或者更多行,取决于您认为匹配将跨越多少行),并将它们重叠,例如:加载行1-2,然后下一个循环加载行2-3,下一个加载行3-4;并在每个循环中对这两行合并多行regex。 |
|
|
4
0
我想说,在进行替换之前,您应该预先解析/规范化数据,以便每行描述一组可能需要应用替换的数据。否则,您会遇到数据完整性的复杂问题,如果没有其他许多困难,就无法真正解决这些问题。 如果有方法将数据分块到逻辑块中,那么可以构建一个使用MapReduce模式分析数据的程序。 |
|
|
5
0
我和巴特在一起;你真的应该使用某种类型的解析器。 或者,如果您不介意生成子进程,您可以使用 sed (有一个 native port on windows ,或者您可以使用 Cygwin ) |
|
|
6
0
如果你不介意把你的手弄脏一点(而且你的regex足够简单,或者你对速度有强烈的欲望,也不介意有点痛苦),你可以使用 Ragel . 它可以针对C,尽管网站没有提到它。但是,您需要包装一个文件流来提供缓冲索引器,或者在64位进程中使用内存映射文件(带有不安全的指针),以将其用于大型文件。 |