javascript - tutorial - npm
Node.js lee y escribe lineas de archivos (3)
¿Por qué no usa el complemento node.js para el mismo? https://github.com/pvorb/node-read-files
Instalación: npm install read-files
Uso:
var fs = require("fs");
require("read-files");
fs.readFiles([ "file1", "file2" ], "utf8", function(err, data) {
if (err) throw err;
console.log(data);
});
Intenté leer un archivo línea por línea y enviarlo a otro archivo, usando Node.js.
Mi problema es la secuencia de líneas que a veces se desordena debido a la naturaleza asíncrona de Node.js.
por ejemplo, mi archivo de entrada es como: línea 1 línea 2 línea 3
pero el archivo de salida podría ser como: línea 1 línea 3 línea 2
A continuación se muestra mi código.
var fs = require("fs");
var index = 1;
fs.readFileSync(''./input.txt'').toString().split(''/n'').forEach(
function (line) {
console.log(line);
fs.open("./output.txt", ''a'', 0666, function(err, fd) {
fs.writeSync(fd, line.toString() + "/n", null, undefined, function(err, written) {
})});
}
);
Cualquier pensamiento sería apreciado, gracias.
Si está escribiendo un código síncrono, use solo las funciones síncronas:
var fs = require("fs");
fs.readFileSync(''./input.txt'').toString().split(''/n'').forEach(function (line) {
console.log(line);
fs.appendFileSync("./output.txt", line.toString() + "/n");
});
Para un enfoque asíncrono se podría escribir algo como
var fs = require(''fs''),
async = require(''async''),
carrier = require(''carrier'');
async.parallel({
input: fs.openFile.bind(null, ''./input.txt'', ''r''),
output: fs.openFile.bind(null, ''./output.txt'', ''a'')
}, function (err, result) {
if (err) {
console.log("An error occured: " + err);
return;
}
carrier.carry(result.input)
.on(''line'', result.output.write)
.on(''end'', function () {
result.output.end();
console.log("Done");
});
});
Supongo que quieres realizar algunos cálculos y / o transformaciones en cada línea. Si no, la copia simple es de una sola línea ( consulte la documentación de createReadStream )
fs.createReadStream(''./input.txt'').pipe(fs.createWriteStream(''./output.txt''));
Ahora, intenta abrir el archivo cada vez que desea escribir una línea, y sí, el orden es impredecible aquí. Versión más correcta de su código:
var lines = fs.readFileSync(''./input.txt'').toString().split(''/n'')
function writeLineFromArray(lines) {
var line = arr.shift();
fs.open("./output.txt", ''a'', 0666, function(err, fd) {
fs.writeSync(fd, line + ''/n'', null, undefined, function(err, written) {
writeLineFromArray(lines);
});
});
}
writeLinesFromArray();
Probablemente usaría uno de los módulos de ''flujo de entrada dado, notificarme en cada línea'', por ejemplo node-lazy o byline :
var fs = require(''fs''),
byline = require(''byline'');
var stream = byline(fs.createReadStream(''sample.txt''));
stream.on(''line'', function(line) {
// do stuff with line
});
stream.pipe(fs.createWriteStream(''./output'');