使用 node.js 覆盖大型(2MB+)文本文件中的一行的最佳方法是什么?
我目前的方法涉及
- 将整个文件复制到缓冲区中。
- 通过换行符 (
\n
) 将缓冲区拆分为数组。 - 使用缓冲区索引覆盖该行。
- 然后在加入后用缓冲区覆盖文件
\n
。
使用 node.js 覆盖大型(2MB+)文本文件中的一行的最佳方法是什么?
我目前的方法涉及
\n
) 将缓冲区拆分为数组。\n
。首先,您需要搜索行的开始位置和结束位置。接下来,您需要使用一个函数来替换该行。我有使用我的一个库的第一部分的解决方案:Node-BufferedReader。
var lineToReplace = "your_line_to_replace";
var startLineOffset = 0;
var endLineOffset = 0;
new BufferedReader ("your_file", { encoding: "utf8" })
.on ("error", function (error){
console.log (error);
})
.on ("line", function (line, byteOffset){
startLineOffset = endLineOffset;
endLineOffset = byteOffset - 1; //byteOffset is the offset of the NEXT byte. -1 if it's the end of the file, if that's the case, endLineOffset = <the file size>
if (line === lineToReplace ){
console.log ("start: " + startLineOffset + ", end: " + endLineOffset +
", length: " + (endLineOffset - startLineOffset));
this.interrupt (); //interrupts the reading and finishes
}
})
.read ();
也许你可以试试包替换文件
假设我们有一个如下的txt文件,我们要替换:
第 1 行 -> 第 3 行
第 2 行 -> 第 4 行
// file.txt
"line1"
"line2"
"line5"
"line6"
"line1"
"line2"
"line5"
"line6"
然后,我们可以这样做:
const replace = require('replace-in-file');
const options = {
files: "./file.txt",
from: [/line1/g, /line2/g],
to: ["line3", "line4"]
};
replace(options)
.then(result => {
console.log("Replacement results: ",result);
})
.catch(error => {
console.log(error);
});