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命令行

关键代码

 // handler.js 基本操作指令

 const fs = require("fs")
const readline = require('readline')
const path = require('path') /*
* 逐行读取文件,待下一步操作
* input: fileName:文件相对路径
* return:rl:逐行读取的文件内容
*/
const readLineHandle = (fileName) => {
let filepath = path.join(__dirname, fileName)
let input = fs.createReadStream(filepath)
return readline.createInterface({
input: input
})
} // -l 指令
const returnLinesNum = (fileName) => {
const rl = readLineHandle(fileName)
let lines = 0
// 逐行加一
rl.on('line', (line) => {
lines += 1
})
rl.on('close', () => {
console.log(`${fileName}文件的行数为: ${lines}`)
})
} // -s 指令
const returnWordsNum = (fileName) => {
const rl = readLineHandle(fileName)
let words = []
// 对逐行的内容操作,以空格为分界计算单词数,压入单词栈
rl.on('line', (line) => {
const currentLineArr = line.trim().split(' ')
const currentLine = currentLineArr.length === 0 ? line : currentLineArr
words = [...words, ...currentLine]
})
rl.on('close', () => {
console.log(`${fileName}文件的单词数为: ${words.length}`)
})
} // -c 指令
const returnLettersNum = (fileName) => {
const rl = readLineHandle(fileName)
let words = []
// 对逐行的内容操作,以空格为分界计算单词数,压入单词栈
rl.on('line', (line) => {
const currentLineArr = line.trim().split(' ')
const currentLine = currentLineArr.length === 0 ? line : currentLineArr
words = [...words, ...currentLine]
})
rl.on('close', () => {
// 逐行读取结束时,对单词栈的逐个单词长度累加,得字符数
const wordsNum = words.reduce((acc, val) => {
return acc + val.length
}, 0)
console.log(`${fileName}文件的字母数为: ${wordsNum}`)
})
} exports = module.exports = {
returnLinesNum,
returnWordsNum,
returnLettersNum
}
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
 

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

  1. APNs功能之Node.js和Mysql应用总结

    APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ...

  2. 软件工程:Java实现WC.exe基本功能

    项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...

  3. 个人项目WC.exe Node.js+electron实现

    前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...

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

    首先,这个例子用到了服务端渲染的技术.服务端渲染,说白了就是在服务端使用模板引擎,这里我先简单的介绍一下服务端渲染与客户端渲染之间的区别. 服务端渲染与客户端渲染之间的区别: 客户端渲染不利于搜索引擎 ...

  5. 用c语言基本实现wc.exe功能

    网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...

  6. Edge.js:让.NET和Node.js代码比翼齐飞

    通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...

  7. Node.js快速入门

    Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...

  8. WC.exe【C】

    gitee传送门!!!(电脑打不开github,多次尝试未果,决定先用gitee存着先) 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序 ...

  9. 软工作业No.1。Java实现WC.exe

    网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...

随机推荐

  1. python学习笔记之paramiko和sqlalchemy (第九天)

    参考银角大王 :http://www.cnblogs.com/wupeiqi/articles/5095821.html http://www.cnblogs.com/wupeiqi/articles ...

  2. 如何查看视图的sql语句

    select text from syscomments s1 join sysobjects s2 on s1.id=s2.id where name='视图名称'前提条件是视图没有被加密,有权限

  3. RPC REST 比较

    REST 和 RPC是两种架构设计风格. 一般情况下REST多用于与外部接口访问时的设计,RPC多用于系统内部的. 为什么这样呢? 1.RPC必然有依赖,REST必然没有,不要抬杠,SDK暂时不算. ...

  4. 网易blog服务器关闭了,我曾经的大部分博文迁移至此,留作纪念。欢迎大家去我的简书blog~

    ARM时代过去了,另一个AI时代正在上演~ 这一次我看上了计算机视觉,一个依旧在发展,论文数量不断上升的技术领域,还有很多待研究的技术突破点,我可以玩的时间长一点了. 活到老,学到了.学以致用乐趣无穷 ...

  5. 宝塔安装swoole

    新建文件夹 mkdir swoole 切入到文件夹中,进行下载安装包 wget http://pecl.php.net/get/swoole-4.3.2.tgz 解压 tar -zxvf swoole ...

  6. DUILIB消息处理过程

    DUILIB消息处理机制 方法一. 首先窗口基类创建 CWindowWnd->Create() 调用 CWindowWnd->RegisterWindowClass() 注册 CWindo ...

  7. GitHub Toturial

    GitHub Toturial Git Summary 1. 设置姓名和email git config --global user.name "YuboFeng" git con ...

  8. 第一次使用eclipse出现的问题

    最近开始学习java,在一系列操作下安装好了eclipse后,按照书上的问题写了一个小程序 问题: 用户从键盘只能输入整数,程序输出这些整数的乘积. 看到这个问题后就感觉和c语言蛮像的,首先去ecli ...

  9. week1总结

    week1总结 1. 开发上线工具流程以及规范类 规范: css注释:/* Comment Text*/ Css嵌套选择器:请不要让嵌套选择器的深度超过 3 层! 再说一遍: 永远不要嵌套 ID 选择 ...

  10. vue怎么引入外网json文件

    今日吃午饭时,伊万卡前端小妹问了我一个问题."App中有一个模块是用H5做的,其中有一个接口读取的是本地json资源文件,但是这个文件修改时间不定,我又不想每次修改了这个文件再重新发版打个包 ...