Skip to content

Instantly share code, notes, and snippets.

@norbornen
Last active January 21, 2023 05:25
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save norbornen/2d06ee8a7704c51d21d1e7103982281e to your computer and use it in GitHub Desktop.
Save norbornen/2d06ee8a7704c51d21d1e7103982281e to your computer and use it in GitHub Desktop.
move file first string to the end of file: node.js, stream
#!/usr/bin/env node
const fs = require('fs');
const {Buffer} = require('buffer');
const filepath = process.argv[2];
if (!filepath) {
console.log('\nДолжен быть указан путь к существующему файлу!\n');
process.exit(0);
}
console.log(`FILE: ${filepath}`);
let buffer;
const readStream = fs.createReadStream(filepath);//, {highWaterMark: 7});
readStream.on('error', (err) => {
console.error('READING ERROR!!!');
console.trace(err);
process.exit(1);
})
.on('data', (b) => {
buffer = buffer ? Buffer.concat([buffer, b]) : b;
readStream.pause();
const pos = buffer.indexOf('\n');
if (pos === -1) {
readStream.resume();
return;
}
const firstLine = buffer.slice(0, pos);
const restLine = buffer.slice(pos+1, buffer.length);
const writeStream = fs.createWriteStream(filepath, {start: 0, flags: 'a'});
writeStream.on('error', (err) => {
console.error('WRITING ERROR!!!');
console.trace(err);
process.exit(1);
});
readStream.removeAllListeners('data');
readStream.once('end', () => {
writeStream.write('\n');
writeStream.end(firstLine);
});
writeStream.write(restLine);
readStream.pipe(writeStream);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment