模仿WC.exe的功能实现--node.js

Github项目地址:https://github.com/102derLinmenmin/myWc

WC 项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求:
程序处理用户需求的模式为:

wc.exe [parameter] [file_name]


遇到的困难及解决方法

  • 遇到的困难:

1.命令行自定义不了,抛出了与win10不兼容的错误

2.程序跑不了,发现node.js内置的npm在git中无法安装

  • 做的尝试:

1.在package.json中添加配置{"bin":{"mywc":"./index.js"}}自定义配置了mywc命令

2.通过clone在文件里装上npm发现还是无法使用,询问别人后用cmd敲入命令行

  • 是否解决

  • 收获

1.有一些与win10不兼容的错误可以使用添加配置解决

2.很多软件使用时安装成功但是打开失败可以使用cmd命令行

关键代码

 1 // handler.js 基本操作指令
 2
 3 const fs = require("fs")
 4 const readline = require(‘readline‘)
 5 const path = require(‘path‘)
 6
 7 /*
 8  * 逐行读取文件,待下一步操作
 9  * input: fileName:文件相对路径
10  * return:rl:逐行读取的文件内容
11  */
12 const readLineHandle = (fileName) => {
13   let filepath = path.join(__dirname, fileName)
14   let input = fs.createReadStream(filepath)
15   return readline.createInterface({
16     input: input
17   })
18 }
19
20 // -l 指令
21 const returnLinesNum = (fileName) => {
22   const rl = readLineHandle(fileName)
23   let lines = 0
24   // 逐行加一
25   rl.on(‘line‘, (line) => {
26     lines += 1
27   })
28   rl.on(‘close‘, () => {
29     console.log(`${fileName}文件的行数为: ${lines}`)
30   })
31 }
32
33 // -s 指令
34 const returnWordsNum = (fileName) => {
35   const rl = readLineHandle(fileName)
36   let words = []
37   // 对逐行的内容操作,以空格为分界计算单词数,压入单词栈
38   rl.on(‘line‘, (line) => {
39     const currentLineArr = line.trim().split(‘ ‘)
40     const currentLine = currentLineArr.length === 0 ? line : currentLineArr
41     words = [...words, ...currentLine]
42   })
43   rl.on(‘close‘, () => {
44     console.log(`${fileName}文件的单词数为: ${words.length}`)
45   })
46 }
47
48 // -c 指令
49 const returnLettersNum = (fileName) => {
50   const rl = readLineHandle(fileName)
51   let words = []
52   // 对逐行的内容操作,以空格为分界计算单词数,压入单词栈
53   rl.on(‘line‘, (line) => {
54     const currentLineArr = line.trim().split(‘ ‘)
55     const currentLine = currentLineArr.length === 0 ? line : currentLineArr
56     words = [...words, ...currentLine]
57   })
58   rl.on(‘close‘, () => {
59     // 逐行读取结束时,对单词栈的逐个单词长度累加,得字符数
60     const wordsNum = words.reduce((acc, val) => {
61       return acc + val.length
62     }, 0)
63     console.log(`${fileName}文件的字母数为: ${wordsNum}`)
64   })
65 }
66
67 exports = module.exports = {
68   returnLinesNum,
69   returnWordsNum,
70   returnLettersNum
71 }
const fs = require("fs")
const path = require(‘path‘)
const commonHandle = require(‘./constant‘)

module.exports = (filePath, commands) => {
  try {
    commands.forEach((command) => {
    //根据文件路径读取文件,返回文件列表
      fs.readdir(filePath, (err, files) => {
        if (err) {
          console.log(‘如果使用 -s 指令请选择一个文件夹‘)
          console.log(‘正则表达式不需要使用 -s 操作‘)
          throw new Error(‘unexpected command‘)
        } else {
          //遍历读取到的文件列表
          files.forEach((filename) => {
            //获取当前文件的绝对路径
            const filedir = path.join(filePath, filename)
            //根据文件路径获取文件信息,返回一个fs.Stats对象
            fs.stat(filedir, (error, stats) => {
              if (error) {
                console.warn(‘获取文件stats失败‘)
                throw new Error(‘unexpected command‘)
              } else {
                const isFile = stats.isFile()  //是文件
                const isDir = stats.isDirectory()  //是文件夹
                if (isFile) {
                  commonHandle[command].call(this, filedir, command)
                }
                if (isDir) {
                  fileDisplay(filedir) //递归,如果是文件夹,就继续遍历该文件夹下面的文件
                }
              }
            })
          })
        }
      })
    })
  } catch (e) {
    console.log(e.message)
  }
}

  解题思路:使用node.js中的fs和process.argv (fs是读取文件操作指令集  process.argv是获取命令行指令操作)

代码运行测试

在 git bash 中运行以下命令,file 可以相应替换成测试文件

bash mywc -c ./test/*.txt //返回文件的字符数

mywc -w ./test/*.txt //返回文件的词数

mywc -l ./test/*.txt //返回文件的行数

mywc -s -l -w -c test 递归文件夹test里的所有文件 

mywc -l -w -c ./test/*.txt 返回文件里的通配符

 

总结:

第一次运用JavaScript写课设并不是非常熟练,只写了基础的功能和拓展-s ,也是第一次写博客,尝试就会有收获,还是需要不断学习。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划  30  30
· Estimate · 估计这个任务需要多少时间  870  630
Development 开发  810  600
· Analysis · 需求分析 (包括学习新技术)  90  30
· Design Spec · 生成设计文档  30  30
· Design Review · 设计复审 (和同事审核设计文档)  30  30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)  30  30
· Design · 具体设计  120  60
· Coding · 具体编码  240  180
· Code Review · 代码复审  30  60
· Test · 测试(自我测试,修改代码,提交修改)  60  30
Reporting 报告  60 60
· Test Report · 测试报告  60  30
· Size Measurement · 计算工作量  30  30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划  30  30
  合计  870  630
 

原文地址:https://www.cnblogs.com/102menmin/p/9648746.html

时间: 2024-10-12 03:00:01

模仿WC.exe的功能实现--node.js的相关文章

第二次,模仿wc.exe的功能

文献资料及代码来源:http://www.cnblogs.com/changjiangcheng/p/5304120.html github代码上传:https://github.com/satoshi-hoxi/software 一.项目程序功能为: wc.exe的功能是统计文本文件的字符数.单词数和行数.此项目为模仿其功能的命令行程序.即实现了一个统计程序,正确的统计程序文件中的字符数.单词数.行数.以及还具备的其他扩展功能. 二.功能实现的重要步骤: 一部分是主函数,负责打开对应文件和执行

用 node.js 模仿 Apache 的部分功能

首先,这个例子用到了服务端渲染的技术.服务端渲染,说白了就是在服务端使用模板引擎,这里我先简单的介绍一下服务端渲染与客户端渲染之间的区别. 服务端渲染与客户端渲染之间的区别: 客户端渲染不利于搜索引擎优化 服务端渲染可以被爬虫抓取到,而客户端异步渲染很难被爬虫抓取到(例如:AJAX) 大部分的网站既不是纯异步(客户端),也不是纯服务端渲染出来的,而是两者结合的 例如:京东的商品列表采用的就是服务端渲染,目的是为了SEO搜索引擎优化,说白了就是为了能够被搜索到,且能被爬虫抓取(搜索引擎本身也是一种

Java实现WC.exe功能

1 WC 项目要求 项目地址:https://github.com/LIBULULU/yy wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数. 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [parameter] [file_na

wc.exe 功能实现

github 代码地址:https://github.com/1471104698/wc 1.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试.回归测试.效能测试,在实现上述程序的过程中使用相关的工具.3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间. 2.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加

C语言实现wc.exe

前言 Github地址:https://github.com/starmiku/xiangmu_wc 编程语言:C 项目简介 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数. 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 基本功能列表: wc.exe -c file.c //返回文件

wc.exe指令(C++)

https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数. 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件.具体功能要求:程序处理用户需求的模式为: wc.exe [parameter] [file_name] 基本功能

python 实现 wc.exe

前言: Github地址:https://github.com/AndyVirginia/WC 项目简介: wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数.实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求:程序处理用户需求的模式为:wc.exe [parameter] [fi

JAVA实现WC.EXE

Github项目地址:https://github.com/3116004667/testDemo 一.项目要求 1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试.回归测试.效能测试,在实现上述程序的过程中使用相关的工具.3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间. wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文

深入浅出Node.js(一):什么是Node.js

Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定.InfoQ一直在关注Node.js的发展,在今年的两次Qcon大会(北京站和杭州站)都有专门的讲座.为了更好地促进Node.js在国内的技术推广,我们决定开设“深入浅出Node.js”专栏,邀请来自Node.js领域的布道师.