Я пытаюсь понять, как просто записать строку, представляющую строку в файл, где любая вызываемая мной функция автоматически добавляет символ новой строки.

Я пробовал использовать для этого стандартную библиотеку файловой системы NodeJS, но я никак не могу заставить ее работать, не добавляя вручную '\n' в строку.

Вот код, который я пробовал:

const fs = require('fs');
const writer = fs.createWriteStream('test.out.txt', { flags: 'w' })

writer.write('line 1')
writer.write('line 2');
writer.write('line 3');
writer.end('end');

Однако выходной файл test.out.txt содержит следующую строку без символов новой строки:

line 1line 2line 3end

Я бы хотел, чтобы это выглядело так:

line 1
line 2
line 3
end

Обратите внимание, что я не пытаюсь регистрировать сообщения и не пытаюсь перенаправить стандартный вывод.

Есть ли способ напечатать его таким образом с автоматически добавленными символами новой строки?

0
Charles Spencer 12 Мар 2018 в 22:11

2 ответа

Лучший ответ

Как упоминалось в комментариях, вы можете написать функцию для добавления текста в виде строки

const writeLine = (writerObject, text) => {
  writerObject.write(`${text}\n`)
}
writeLine(writer, 'line 1')
writeLine(writer, 'line 2')
writeLine(writer, 'line 3')

Или вы также можете использовать clojure для создания объекта-оболочки, который сохраняет "писатель" вместо того, чтобы передавать его каждый раз

const customWriter = writerObject => {
  return text => writerObject.write(`${text}\n`)
}

const yourWriterWithBreakLine = customWriter(writer)
yourWriterWithBreakLine('line 1')
yourWriterWithBreakLine('line 2')
yourWriterWithBreakLine('line 3')
1
Christian Benseler 12 Мар 2018 в 19:27

Добавление \n вручную не так уж и плохо.

Вы можете написать функцию-оболочку, чтобы не помещать + '\n' везде:

const os = require('os');

let writeln = function (writeStream, str) {
    writeStream.write(str + os.EOL);
}

writeln(writer, 'line 1');
writeln(writer, 'line 2');
writeln(writer, 'line 3');
writeln(writer, 'end');

Из того, что я могу сказать беглым взглядом на документацию fs.WriteStream, нет встроенной функции writeln или чего-либо подобного.

1
Matt Mokary 12 Мар 2018 в 19:25