update tutorial node introduccion framework documentación diccionario javascript node.js

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'');