0

我试图弄清楚如何简单地将表示一行的字符串写入文件,无论我调用什么函数都会自动附加一个换行符。

'\n'我已经尝试为此使用默认的 NodeJS 文件系统库,但如果不手动附加到字符串,我无法让它以任何方式工作。

这是我尝试过的代码:

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

请注意,我没有尝试记录消息,也没有尝试重定向标准输出。

有什么方法可以通过自动添加新行字符来打印它?

4

2 回答 2

1

手动附加\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功能或类似的东西。

于 2018-03-12T19:19:24.303 回答
1

如评论中所述,您可以编写一个函数将文本添加为​​一行

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')
于 2018-03-12T19:20:07.530 回答