我正在终端中使用learnyounode进行这些练习,我有一个爆炸,但我只是需要一步一步地解释这段代码中发生了什么。
var fs = require('fs')
var filename = process.argv[2]
var buf = fs.readFileSync(filename)
var str = buf.toString();
var count = str.split('\n').length
console.log(count - 1)
非常感谢!
答案 0 :(得分:1)
var fs = require('fs')
这告诉节点加载名为fs
的“文件系统”包。它用于管理文件系统。
var filename = process.argv[2]
var buf = fs.readFileSync(filename)
var str = buf.toString()
filename
变量从索引2处的参数读入,看起来是文件名。然后,创建一个名为buf
的缓冲区来读入此文件中的数据。然后,创建str
以将该信息转换为string
。
最后,var count = str.split('\n').length
接受此字符串并将其按\n
或按行拆分为数组,并获取此数组的长度。现在这是行数。
console.log(count - 1)
只需使用- 1
将此行数输出到控制台,以消除文件末尾的额外换行符或作者知道的其他一些额外数据。
答案 1 :(得分:0)
拉入'fs'模块(文件系统功能)
使用args列表中的第三个参数作为路径打开文件
使用fs import来读取文件的内容
将文件内容拆分为逐行数组并获取数组长度(又称行数)
写入数组长度减去1,这是数组的最后一个索引。如果有标题行,则也可以是内容行数。
答案 2 :(得分:0)
此代码将读取文件并打印行数
var fs = require('fs')
fs是一个进行文件操作的节点模块。该行将创建一个fs
变量,可以访问fs模块中的所有导出函数。它就像一个可以访问所有公共函数的类的对象。它类似于c #include
语句或java import
语句。
var filename = process.argv[2]
argv
是一个包含在terminal / command-prompt中指定的参数列表的数组。所以这一行会从终端读取filename
。
var buf = fs.readFileSync(filename)
此行将创建变量buf
并将名为filename
的文件的内容保存到其中。内容不会保存为字符串,因此需要在下一行进行转换。
var str = buf.toString();
默认情况下, buf
有一个方法/函数toString()
原型。此方法返回转换为字符串的变量,因此str
将原始文件的内容作为字符串。
var count = str.split('\n').length
str
默认使用split方法原型。它将分隔符作为参数并返回一个字符串数组。因此str.split('\n')
将返回一系列分隔的行(由'\ n'分隔),然后将在该数组上调用length
以返回其长度。
您可以将其分为两个阶段,如下所示
var lines = str.split('\n')
var count = lines.length
最后,假设存在最后一个空白行,count
减少1。 console.log
会将其记录到终端/命令提示符中。
console.log(count - 1)