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' ]