ファイルの途中に挿入 - Javascript

fs.readFile

memo.txt

1
2
3
4
5
6
7
8
9

script.js

fs.readFile('./memo.txt', 'utf8', function(err, data){
    let lines = data.split("\r\n");
    let txt = "";
    let no = 5;
    let msg = "hello";

    lines.forEach((value, index, line) => {
        if(index + 1 == no){
            txt += value + "\n" + msg + "\n";
        } else if (index + 1 == line.length){
            txt += value;
        } else {
            txt += value + "\n";
        }
    });

    fs.writeFile("./memo.txt", txt, function(){});
});

// 実行結果
1
2
3
4
5
hello
6
7
8
9

readline

script.js

async function readfile(filename, no, msg){
    const rs = fs.createReadStream('./memo.txt');
    const rl = readline.createInterface({input: rs});

    let index = 0;
    let lines = [];
    let txt = "";

    for await (const line of rl) {
        if(index == no){
            lines.push(msg);
        }
        lines.push(line);
        index++
    }
    
    for(let i = 0; i < lines.length; i++){
        if(i == lines.length - 1){
            txt += lines[i];
        } else {
            txt += lines[i] + "\n";
        }
    }

    fs.writeFile(filename, txt, function(){});
}

const msg = "hello";
readfile('./memo.txt', 5, msg);

Promise

script.js

const fs = require('fs');
const readline = require('readline');

function readFileByLine(filePath, no, insert_value) {
  var lines = [];
  var stream = fs.createReadStream(filePath);
  var reader = readline.createInterface({ input: stream });

  return new Promise((resolve, reject) => {
    reader.on('line', line => {
        lines.push(line);
    });
    reader.on('close', () => {
        resolve([lines, no, insert_value]);
    });
  });
}

let no = 5;
let insert_value = "hoge";

readFileByLine('./memo.txt', no, insert_value).then((lines) => {
    let len = lines[0].length;
    let txt = "";

    lines[0].forEach((value, index, data) => {
        if(index + 1 == lines[1]){
            txt += value + "\n" + lines[2] + "\n";
        } else if(index + 1 == len){
            txt += value;
        } else {
            txt += value + "\n";
        }
    })
    console.log(txt)
});