如何在Node中读出带换行符的txt文件
How to Read Out txt File with Line Breaks in Node
我正在尝试使用节点中的 fs 模块输出带有换行符的 txt 文件。
试用 #1 - UTF8 编码
let list = req.body.L_.replace(/['"]+/g, '').replace(/\r\n/gi, '\0x0D')
fs.writeFile('./_log/L_.replace(/\"/g, "") + '.txt', list, 'utf8', (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r\n 2 2 ITEM \r\n"
输出
0 1 ITEM \u0A0 2 2 ITEM \u0A
预期输出
0 1 ITEM
2 2 ITEM
试用 #2 - 默认节点 fs 编码
let list = req.body.L_.replace(/['"]+/g, '')
fs.writeFile('./_log/L_.txt', list, (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r\n 2 2 ITEM \r\n"
输出
0 1 ITEM \u0A0 2 2 ITEM \u0A0
预期输出
0 1 ITEM
2 2 ITEM
试用 #3 - 默认节点 fs 编码
let list = req.body.L_.replace(/['"]+/g, '')
fs.writeFile('./_log/L_.txt', list, (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r 2 2 ITEM \r"
输出
0 1 ITEM 2 2 ITEM
预期输出
0 1 ITEM
2 2 ITEM
根据评论进行编辑:
这不是 nodejs 问题。听起来记事本编码不存在。我记得几年前用 nodepad 查看服务器日志,它们也都在一条线上。我建议使用不同的文本文件 reader 例如 Sublime 或 Notepad++
当我 运行 您拥有的 .replace
代码时,它对我来说工作正常。下面我根据您的示例创建了一个测试字符串。我已经转义了一些 javascript 会解释的字符。然后调用您的替换方法。你可以看到结果是在
之后
var s = "\"0 101 1 102 XYZ 15141 144 Test \n\""
var s2 = s.replace(/['"]+/g, '');
// s2 is 0 101 1 102 XYZ 15141 144 Test \n
在您的示例中,您没有调用 replace 方法。这让我相信你叫错了。替换方法 returns 一个新字符串,不影响原始字符串。
我建议这样(存储很便宜)
var num = JSON.stringify(req.body.number).replace(/\"/g, "");
var list = JSON.stringify(req.body.list).replace(/['"]+/g, "");
list = list.replace(/[ ]+/g, "\t"); // Replaces the spaces with a single tab
fs.writeFile('./_log' + num + '.txt', list, (err) => {
if (err) throw err
})
我正在尝试使用节点中的 fs 模块输出带有换行符的 txt 文件。
试用 #1 - UTF8 编码
let list = req.body.L_.replace(/['"]+/g, '').replace(/\r\n/gi, '\0x0D')
fs.writeFile('./_log/L_.replace(/\"/g, "") + '.txt', list, 'utf8', (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r\n 2 2 ITEM \r\n"
输出
0 1 ITEM \u0A0 2 2 ITEM \u0A
预期输出
0 1 ITEM
2 2 ITEM
试用 #2 - 默认节点 fs 编码
let list = req.body.L_.replace(/['"]+/g, '')
fs.writeFile('./_log/L_.txt', list, (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r\n 2 2 ITEM \r\n"
输出
0 1 ITEM \u0A0 2 2 ITEM \u0A0
预期输出
0 1 ITEM
2 2 ITEM
试用 #3 - 默认节点 fs 编码
let list = req.body.L_.replace(/['"]+/g, '')
fs.writeFile('./_log/L_.txt', list, (err) => {
if (err) throw err
})
输入
"0 1 ITEM \r 2 2 ITEM \r"
输出
0 1 ITEM 2 2 ITEM
预期输出
0 1 ITEM
2 2 ITEM
根据评论进行编辑:
这不是 nodejs 问题。听起来记事本编码不存在。我记得几年前用 nodepad 查看服务器日志,它们也都在一条线上。我建议使用不同的文本文件 reader 例如 Sublime 或 Notepad++
当我 运行 您拥有的 .replace
代码时,它对我来说工作正常。下面我根据您的示例创建了一个测试字符串。我已经转义了一些 javascript 会解释的字符。然后调用您的替换方法。你可以看到结果是在
var s = "\"0 101 1 102 XYZ 15141 144 Test \n\""
var s2 = s.replace(/['"]+/g, '');
// s2 is 0 101 1 102 XYZ 15141 144 Test \n
在您的示例中,您没有调用 replace 方法。这让我相信你叫错了。替换方法 returns 一个新字符串,不影响原始字符串。
我建议这样(存储很便宜)
var num = JSON.stringify(req.body.number).replace(/\"/g, "");
var list = JSON.stringify(req.body.list).replace(/['"]+/g, "");
list = list.replace(/[ ]+/g, "\t"); // Replaces the spaces with a single tab
fs.writeFile('./_log' + num + '.txt', list, (err) => {
if (err) throw err
})