learnyounode'我的第一个I / O'的例子
这个程序困惑我。 这个程序的目标是计算文件中换行符的数量,并在命令提示符下输出。 Learnyounode然后对文件运行自己的检查,看看他们的答案是否符合你的答案。
所以我从答案开始:
var fs = require('fs'); var filename = process.argv[2]; file = fs.readFileSync(filename); contents = file.toString(); console.log(contents.split('\n').length - 1);
learnyounodevalidation这个程序正确计算新行的数量。 但是,当我将程序更改为以下任一项时,不会打印出与learnyounode打印出的数字相同的数字。
file = fs.readFileSync(C:/Nick/test.txt); file = fs.readFileSync(test.txt);
不应该nodejs readFileSync能够input一个地址,并正确地读取它?
最后,这个程序应该打印出一个程序中的换行符。 为什么正确的程序和learnyounode每次运行这个程序时都输出与换行符数量不同的相同数字?
例如,test.txt中的换行符数是3.但是运行这个程序每次打印出一个不同的数字,比如45,15,2等等。但是同时,它被learnyounodevalidation为正确的程序,因为他们的答案都匹配! 到底是怎么回事?
编辑:test.txt看起来像这样
ok testing 123
所以,我在本地机器上试过你的程序,你的程序工作正常。 我不是learnyounode的专家。 我只是在你的问题后试过,但我想我明白它是如何工作的。 因此,这里是你的问题的答案:
不应该nodejs readFileSync能够input一个地址,并正确地读取它?
这个来自nodejs的方法工作正常。 你可以尝试打印文件的内容,你会发现没有问题。
为什么正确的程序和learnyounode每次运行这个程序时都输出与换行符数量不同的相同数字。
learnyounode运行你的程序,每次input不同的filename
。 它通过针对同一个文件运行自己的正确代码副本来validation程序的输出。
但是,当我将程序更改为以下任一项时,不会打印出与learnyounode打印出的数字相同的数字。
这是因为在这一点上,你的代码正在处理一个固定的文件,而learnyounode在每次迭代中仍然处理不同的文件。
这也使我绊倒了。 如果你仔细阅读learnyounode的说明,他们明确地说…
“要读取的文件的完整path将作为第一个命令行参数提供。”
这意味着他们提供了自己的文件的path。
当你使用process.argv[2]
,这是传递第三个数组项(learnyounodetestingtxt文件)到您的脚本。 如果你运行一个console.log(process.argv);
你会看到完整的数组对象看起来像这样:
[ '/usr/local/bin/node', '/Users/user/pathstuff/learnyounode/firstio.js', '/var/folders/41/p2jvc80j26l7nty0sk0zs1z40000gn/T/_learnyounode_1613.txt' ]
当你replace自己的文本文件时,validation数字开始不匹配的原因是因为你的文件总是有3行,而他们的unit testing通过process.argv
不断传入不同的长度文件。
希望有所帮助。
当您在learnyounode中使用process.argv [2]时,自动提供的参数是由learnyounode提供的,因此在多次validation时会打印不同数量的行,如45,15,2等。
如果你还记得第二个挑战“BABYSTEPS”的话,
learnyounode将在运行时为您的程序提供参数
learnyounodevalidationprogram.js所以你不需要自己提供。
这就是为什么不同的行号在多次program.jsvalidation。
有两种不同的方式。 如果你运行程序如:
node program_name.js
比你需要添加文本文件的path:
node program_name.js text_file.txt
在这种情况下请确保文件在同一目录中。
或者你可以用命令运行它:
learnyounode program_name.js
而且默认的文本文件将由learnyounode提供。 你可以通过使用来观看这个文本文件的内容
console.log(buffer)
问题陈述说
要读取的文件的完整path将作为第一个命令行参数提供。
所以你必须把path/to/file
作为参数。
记住process.argv
你应该使用下面的方法来执行.js文件
node program_name.js /path/to/text_file_name
而不是
learnyounode run program_name.js /path/to/text_file_name
在这个方法上,Node.js会运行你的程序,并在命令行界面上input你指定的文件。
希望这个答案可以帮助你编程。 🙂
他们的指示是错误的。 该文件实际上是第三个参数(可以通过console.log(process.argv)看到):
C:\projects\nodejs\test>learnyounode run IO.js [ 'C:\\Program Files\\nodejs\\node.exe', 'C:\\projects\\nodejs\\test\\IO.js', 'C:\\Users\\CM~1\\AppData\\Local\\Temp\\_learnyounode_10748.txt' ]