learnyounode'我的第一个I / O'示例

时间:2013-11-18 05:51:27

标签: node.js

这个程序让我很困惑。此程序的目标是计算文件中的换行数并在命令提示符下输出。 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,因为他们的答案都匹配!发生了什么事?

编辑: test.txt看起来像这样

ok
testing
123

6 个答案:

答案 0 :(得分:4)

所以,我在我的本地机器上尝试了你的程序,你的程序运行正常。我不是learnyounode的专家。我刚刚在你的问题后尝试过,但我想我明白它是如何工作的。因此,以下是您的问题的答案:

  

不是nodejs readFileSync能够输入地址并正确读取吗?

来自nodejs的这个方法工作正常。您可以尝试打印文件的内容,但您会发现没有问题。

  

为什么每次运行此程序时,正确的程序和learnyounode都会打印出与换行符数量相同的数字。

learnyounode每次都以不同的filename运行您的程序。它通过针对同一文件运行自己的正确代码副本来验证程序的输出。

  

但是当我将程序更改为以下任何一项时,它不会打印出与learnyounode打印出来相同的数字。

这是因为此时,您的代码正在处理固定文件,而learnyounode仍然在每次迭代时处理不同的文件。

答案 1 :(得分:2)

这也使我绊倒了。如果你仔细阅读了learnyounode指令,他们明确地说......

  

"要读取的文件的完整路径将作为第一个命令行参数提供。"

这意味着他们正在提供自己文件的路径。

当您使用process.argv[2]时,这会将第3个数组项(learnyounode 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继续传递不同长度的文件。

希望有所帮助。

答案 2 :(得分:1)

当你在learnyounode中使用process.argv [2]时,该参数由learnyounode自动提供,因此它会在多次验证时打印不同数量的行,如45,15,2等。
如果你还记得第二次挑战“BABYSTEPS”,那么就给出了:

当你运行时,

learnyounode将为你的程序提供参数   learnyounode验证program.js所以你不需要自己提供它们。

这就是为什么program.js上的不同行号多次验证的原因。

答案 3 :(得分:0)

有两种不同的方式。 如果您运行如下程序:

node program_name.js 

比你需要添加文本文件的路径:

node program_name.js text_file.txt

在这种情况下,请确保文件位于同一目录中。

或者您可以使用命令运行它:

learnyounode program_name.js 

和默认文本文件将由learnyounode提供。您可以使用

观看此文本文件的内容
console.log(buffer)

答案 4 :(得分:0)

问题陈述说

  

将首先提供要读取的文件的完整路径   命令行参数。

所以你要传递path/to/file作为参数。

记住process.argv

答案 5 :(得分:-1)

您应该使用以下方法来执行.js文件

node program_name.js /path/to/text_file_name

而不是

learnyounode run program_name.js /path/to/text_file_name

在这个方法上,Node.js将运行你的程序,并在命令行界面输入你指定的文件。

希望这个答案可以帮助您编程。 :)