2016-05-28 2 views
0

Я не понимаю, почему я получаю выход:код breaks console.log()!

var frenchWords; 
fs = require('fs') 

var data = fs.readFileSync('frenchVerbsList.txt', 'utf8'); 
frenchWords = data.split('\n'); 
console.log(Array.isArray(frenchWords)); //true 

var x = frenchWords[0]; 
console.log("a: " + "look: " + x + typeof(x)); 
//outputs "stringk: abaisser" 

Я не понимаю, почему выход не «: смотрите: abaisserstring»

Любое объяснение того, что происходит будут с благодарностью приняты :-)

Gerard

+1

Ну, я только что использовал вашу программу, и выход такой, как ожидалось. 'a: look: abaisserstring'. Как выглядит ваш файл 'frenchVerbsList.txt'? Для меня его новая линия разделяла слова. –

+0

В случае, если вы задаетесь вопросом о \ r и \ n в разных средах: http://stackoverflow.com/questions/1761051/difference-between-n-and-r Или о решении для браузера вместо узла: http: // stackoverflow .com/a/1156388/146513 –

+0

Невозможно! Вы уверены, что это именно тот код, который вы выполняете? –

ответ

4

это, вероятно, происходит потому, что линии вашего файла текста заканчиваются \ г \ п, а не только \ п, как я могу воспроизвести это с:

var x = 'abaisser\r'; 
console.log("a: " + "look: " + x + typeof (x)); 

Это выводит "stringk: abaisser", так как CR (\ г) символ возвращает выходной курсор обратно в начало строки, так что string overrwrites ранее OUTPUT a: loo символов.

Так попробуйте изменить data.split вызов:

frenchWords = data.split('\r\n'); 

Или, как Исмаэль предложил в комментариях, используйте регулярное выражение, которое соответствует любому из общих линейных окончаний CR, LF или CRLF с помощью:

frenchWords = data.split(/\r?\n|\r/g) 
+1

Собственно, используйте 'data.split (/ \ r? \ N | \ r/g)'. Там больше нет проблем с новыми линиями. Он работает с '\ r',' \ n' и '\ r \ n'. Попробуйте это: '' ab ~ \ n test \ r \ n \ r f'.split (/ \ r? \ N \ \ r/g) '(должно выводить' ["ab ~", "test", "" , "f"] ') –

+0

@IsmaelMiguel Хорошая идея - добавлено. Благодарю. – JohnnyHK