2013-11-18 5 views
9

Эта программа меня озадачивает. Цель этой программы - подсчитать количество строк в файле и вывести их в командной строке. Learnyounode затем запускает собственную проверку файла и видит, соответствует ли их ответ вашему ответу.learnyounode «Мой первый ввод-вывод»

Так я начинаю с ответом:

var fs = require('fs'); 

var filename = process.argv[2]; 

file = fs.readFileSync(filename); 

contents = file.toString(); 

console.log(contents.split('\n').length - 1); 

learnyounode проверяет, что эта программа правильно подсчитывает количество новых линий. Но когда я меняю программу на любое из следующих, она не печатает тот же номер, что и печатание learnyounode.

file = fs.readFileSync(C:/Nick/test.txt); 
file = fs.readFileSync(test.txt); 

Не должен ли nodejs readFileSync иметь возможность вводить адрес и читать его правильно?

И, наконец, эта программа должна распечатать # новых строк в программе. Почему и правильная программа, и learnyounode распечатывают тот же номер, который отличается от количества новых строк каждый раз, когда я запускаю эту программу?

Например, количество строк в тексте test.txt равно 3. Но при запуске этой программы каждый раз распечатывается другое число, например 45, 15, 2 и т. Д. Но в то же время оно проверяется как правильное программы learnyounode, потому что оба их ответа совпадают! Что происходит?

EDIT: test.txt выглядит следующим образом

ok 
testing 
123 
+0

Помогите показать нам свой файл test.txt? Кроме того, как вы выяснили, что число строк в test.txt равно 3? – Chandranshu

+0

Это был всего лишь гипотетический ответ. То, что я действительно пытаюсь понять, - это то, почему число новых строк меняется с 45, 15, 2, .. для моей программы и learnyounode. Я добавлю, как выглядит мой txt-файл. – krikara

+0

k, поэтому вы получаете разные номера для одного и того же файла теста. Это звучит странно. Позвольте мне запустить вашу программу локально, чтобы подтвердить это. – Chandranshu

ответ

4

Итак, я попробовал вашу программу на моей локальной машине и ваша программа работает нормально. Я не специалист по изучению. Я просто попробовал это после вашего вопроса, но я думаю, что понимаю, как это работает. В качестве таковых, вот ответы на ваши вопросы:

Нельзя ли nodejs readFileSync иметь возможность вводить адрес и читать его правильно?

Этот метод от nodejs работает нормально. Вы можете попробовать распечатать содержимое файла, и вы увидите, что проблем нет.

Почему как правильная программа, так и learnyounode распечатывают тот же номер, который отличается от количества новых строк каждый раз, когда я запускаю эту программу.

learnyounode запускает вашу программу с другим filename в качестве входа каждый раз. Он проверяет вывод вашей программы, запустив собственную копию правильного кода в том же файле.

Но когда я меняю программу на любое из следующего, она не распечатывает тот же номер, что и печатный отчет learnyounode.

Это потому, что на данный момент ваш код обрабатывает фиксированный файл, тогда как learnyounode по-прежнему обрабатывает разные файлы на каждой итерации.

-1

необходимо выполнить следующие действия.JS файлы

node program_name.js /path/to/text_file_name 

вместо

learnyounode run program_name.js /path/to/text_file_name 

по этому методу, Node.js будет запускать программу с указать файлы из ввода в командной строке интерфейса.

Этот ответ может помочь вам в программировании. :)

+0

, это не отвечает на вопрос, а дает возможность работать над выполнением программы. но вопрос другой – Rajesh

0

есть два разных способа. при запуске программы, как:

node program_name.js 

, чем вам нужно добавить путь в текстовый файл:

node program_name.js text_file.txt 

в этом случае убедитесь, что файлы находятся в одном каталоге.

или вы можете запустить его с помощью команды:

learnyounode program_name.js 

и чем текстовый файл по умолчанию будет обеспечиваться learnyounode. Вы можете просмотреть содержимое этого текстового файла, используя

console.log(buffer) 
2

Это тоже сработало. Если вы внимательно прочитаете инструкции learnyounode, они прямо говорят ...

«Полный путь к считываемому файлу будет предоставлен в качестве первого аргумента командной строки».

Это означает, что они предоставляют путь к их собственному файлу.

Когда вы используете process.argv[2], это передается в 3-й элемент массива (файл testyounode test txt) в ваш скрипт. Если запустить console.log(process.argv); вы увидите полный массив объекты выглядят следующим образом:

[ '/usr/local/bin/node', 
    '/Users/user/pathstuff/learnyounode/firstio.js', 
    '/var/folders/41/p2jvc80j26l7nty0sk0zs1z40000gn/T/_learnyounode_1613.txt' ] 

Причина номер проверки начинает несоответствующую, когда вы заменяете свой собственный текстовый файл для их потому, что ваш файл всегда имеет 3 линии тогда как их модульные тесты продолжают передавать файлы различной длины через process.argv.

Надеюсь, что это поможет.

0

Постановка задачи говорит

Полный путь к файлу для чтения будет предоставлен в качестве первого аргумента командной строки.

Итак, вы должны передать path/to/file в качестве аргумента.

Запомнить process.argv

1

при использовании process.argv [2] в learnyounode, аргумент обеспечивается learnyounode автоматически, поэтому она печатает различное количество линий, как 45, 15, 2 и т.д. в несколько раз проверка.
Если вы помните второй вызов «BABYSTEPS» тщательно это было дано:

learnyounode будет поставлять аргументы в вашу программу при запуске
learnyounode проверить program.js так что вам не нужно, чтобы поставить их самостоятельно.

Именно поэтому разные номера строк при проверке программы.js несколько раз.

Смежные вопросы