Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js覆盖文件中的一行_Javascript_Node.js_Filesystems - Fatal编程技术网

Javascript 使用node.js覆盖文件中的一行

Javascript 使用node.js覆盖文件中的一行,javascript,node.js,filesystems,Javascript,Node.js,Filesystems,使用node.js覆盖大型(2MB+)文本文件中的行的最佳方法是什么 我目前的方法包括 将整个文件复制到缓冲区中 按新行字符(\n)将缓冲区拆分为数组 使用缓冲区索引覆盖行 然后在使用\n连接后使用缓冲区覆盖文件 首先,您需要搜索线路的起点和终点。接下来,您需要使用一个函数来替换该行。我使用我的一个库为第一部分提供了解决方案: var lineToReplace=“您的线路要替换”; var-offset=0; var endLineOffset=0; 新的BufferedReader(“您的

使用node.js覆盖大型(2MB+)文本文件中的行的最佳方法是什么

我目前的方法包括

  • 将整个文件复制到缓冲区中
  • 按新行字符(
    \n
    )将缓冲区拆分为数组
  • 使用缓冲区索引覆盖行
  • 然后在使用
    \n
    连接后使用缓冲区覆盖文件

首先,您需要搜索线路的起点和终点。接下来,您需要使用一个函数来替换该行。我使用我的一个库为第一部分提供了解决方案:

var lineToReplace=“您的线路要替换”;
var-offset=0;
var endLineOffset=0;
新的BufferedReader(“您的_文件,{编码:“utf8”})
.on(“错误”,函数(错误){
console.log(错误);
})
.on(“行”,函数(行,字节偏移量){
直线偏移=端点偏移;
endLineOffset=byteOffset-1;//byteOffset是下一个字节的偏移量。-1如果是文件的结尾,如果是这种情况,endLineOffset=
如果(行===行替换){
console.log(“开始:+startLineOffset+”,结束:+endLineOffset+
,长度:“+(endLineOffset-startinglineoffset));
this.interrupt();//中断读取并完成
}
})
.read();

也许你可以试试这个软件包

假设我们有一个txt文件,如下所示,并希望替换:

第1行->第3行

第2行->第4行

//file.txt
“第1行”
“第2行”
“第5行”
“第6行”
“第1行”
“第2行”
“第5行”
“第6行”
然后,我们可以这样做:

const replace=require('replace-in-file');
常量选项={
文件:“./file.txt”,
from:[/path1/g,/path2/g],
收件人:[“路径3”、“路径4”]
};
替换(选项)
。然后(结果=>{
日志(“替换结果:,结果”);
})
.catch(错误=>{
console.log(错误);
});

更多详细信息请参阅其文档:

使您能够写入特定的偏移量/位置,您提前知道该索引吗?不知道。如何计算每一行的偏移量?我觉得值得一试,有时你有一个文件的指定格式,这使得这样的计算成为可能。如果你在文本文件中使用固定长度的行,偏移量方法可能会起作用…但在这一点上,我会重新考虑这种方法。如果您只需要附加文本文件,那么文本文件非常有用。之后我会考虑一个数据库。
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 ();