gpt4 book ai didi

javascript - 如何保存dos文本文件编码

转载 作者:行者123 更新时间:2023-11-29 20:58:48 25 4
gpt4 key购买 nike

我写了一个小的 nodejs 脚本来自动化一些东西基本上,它所做的是:

  1. 从文件 1 中读取并创建一个 js 对象
  2. 逐行读取file2,根据之前创建的对象查找并替换部分字符串。
  3. 将该行写入一个新文件。

虽然上述所有方法都有效,但新文件中的格式与原始文件中的格式不同。我的印象是正在读取的文件是 dos 格式,而正在写入的文件是 unix 格式,但我不确定。

我想保留所有转义字符。我还应该做什么?

ma​​in.js

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

// get the file names from command line
var micrFileMappings = process.argv[2];
var inputFile = process.argv[3];

var micrObject = {};

// read the first file and create the object.
// the first file format is:
// 121212:2323232,
// 345353:2325646,...

var readMicrFile = readline.createInterface({
input: fs.createReadStream(micrFileMappings),
console: false
});

readMicrFile.on('line', function(line) {
var currentLineArray = line.split(":");
var key = currentLineArray[0];
var value = currentLineArray[1];

//populate the object
micrObject[key] = value;
});


// read the file that is to be processed line by line
var rd = readline.createInterface({
input: fs.createReadStream(inputFile),
console: false
});


rd.on('line', function(line) {

var existingID = line.substring(2, 11);

if (micrObject.hasOwnProperty(existingID)) {
line = line.replace(existingID, micrObject[existingID]);
}

// write line by line to the new file
fs.appendFile('processed.txt', line, function(err) {
if (err) {
// append failed
} else {
// done
}
});

});

我的原始文件如下所示:

od -c original.txt

...
...
...
0002720 5 6 0 0 1 5 1 0 0 5 6
5 6 0 0 1 5 1 0 0 5 6
0002740 0 3 2 3 4 B r u h a t B e n g
0 3 2 3 4 B r u h a t B e n g
0002760 a l u r u M a h 0 0 0 0 0 0 0
a l u r u M a h 0 0 0 0 0 0 0
0003000 0 0 0 6 7 3 0 0 0 0 0 0 3 4 4 5
0 0 0 6 7 3 0 0 0 0 0 0 3 4 4 5
0003020 4 0 0
4 0 0
0003040 \r \n
\r \n
0003054

但我的输出文件如下所示:

...
...
...
0001160 2 2 5 6 0 0 0 2 2 9 1 1 0
0001200 0 2 5 1 0 0 1 0 1 1 0 0 6 3 8 K
0001220 u m a r a S w a m y
0001240
0001260 5 6 0 0 1 5 1 0 0
0001300 5 6 0 3 2 3 4 B r u h a t B e
0001320 n g a l u r u M a h 0 0 0 0 0
0001340 0 0 0 0 0 6 7 3 0 0 0 0 0 0 3 4
0001360 4 5 4 0 0
0001400
0001414

如果您注意到,转义字符 \r \n 不见了。我该如何保存它?

最佳答案

通过查看 simplified source of readline.js (这不是 current version )您会看到 10(=='\r') 和 13(=​​='\n') 未包含在行事件中发送的缓冲区中。恐怕您需要一个不同的库或修改源代码以包含它。

您可以复制上面简化的库并在第35行和第36行之间添加

      lineBuffer[lineLength] = data[i]; // Buffer new line data.
lineLength++;

这会产生预期的效果。

关于javascript - 如何保存dos文本文件编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com