следующий скрипт узла (wc.js) возвращает значение, отличное от утилиты unix wc;fs.readFile(). ToString завершается пустой строкой
fs = require('fs');
//console.log(fs.readFileSync(process.argv[2]).toString().split('\n'));
console.log(fs.readFileSync(process.argv[2]).toString().split('\n').length);
выход на себе, является:
[email protected]:~/stuff$ wc -l wc.js
3 wc.js
[email protected]:~/stuff$ node wc.js wc.js
4
и напечатав массив, кажется, что файл прибудет будут приостановлен дополнительной пустой строка:
[email protected]:~/stuff$ node wc.js wc.js
[ 'fs = require(\'fs\');',
'console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\'));',
'//console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\').length);',
'' ]
Является ли это этому ожидаемое поведение? Я не вижу, чтобы это сообщалось в документации узла.
Новая строка добавляется при выполнении buffer.toString: на самом деле даже пустые файлы имеют дополнительные строки. бродяга @ precise32: ~/прочее $ сенсорного tmpfile бродячих @ precise32: ~/вещи $ узлового wc.js tmpfile бродячих @ precise32: ~/материал $ туалет -l tmpfile 0 tmpfile – deddu
Я уверен, 'buffer.toString()' не добавляет символы новой строки. Причина, по которой пустая строка возвращает одну строку, состоит в том, что если '.split()' не находит подходящих мест для разделения, он возвращает массив с одним элементом, содержащим исходную строку, которая равна длине 1. 'fs.writeFileSync ('tmp', ''); fs.readFileSync ('tmp') // ' ' fs.writeFileSync ('tmp', '\ n'); fs.readFileSync ('tmp') // ' –