项目源码地址:https://gitee.com/xjtsh/projects

功能实现:

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c     //返回文件 file.c 的单词总数

wc.exe -l file.c     //返回文件 file.c 的总行数

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

项目简介

本项目的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name]

存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

我采用的是Java语言实现。这个项目看似功能比较简单,实则工作量巨大,原因有三:一、对细节的要求比较高,从基本功能实现形式,小到命令输入的格式,都有比较严格的要求,必须按照要求来执行的话需要增加一定的工作耗时;需求分析、测试用例、博客撰写,所以整个项目开发的过程不单单只是考虑如何去实现功能这一件事情了,这也导致了所花费的时间增多;自身编程水平的限制,整个项目的流程要求非常规范,所以一步一步来执行的话需要连续的时间,然而当前课程任务并不轻松加上这几天正好又是另一门课程的课程设计上交截止时间,故而只能在零零碎碎的时间之中去完成项目设计和编码实现,在一定程度上降低了效率.但是最麻烦是.jar转.exe文件实在消耗了我大量的时间,网上博客众说纷纭,自己尝试的时候出现各种不理解的bug,不理解软件的运行过程对于我改进转换过程造成了极大的困难,好在,最终解决了问题。先这样吧,以后再汲取经验和教训,慢慢学习改进。

解题思路:

获取键盘数输入的指令,当读取到 '-'这个命令符号前缀时 ,我们能知道它将会和下一个字符一起构成一个操作指令,于是我们通过对下一个字符的读取就能够决定这个命令符号具体代表了什么含义。这里分几种情况:若下一个字符是 'c'、 'w'、'l'之类的基本功能参数,若下一个字符是 'o'、'e'之类的拓展功能参数,那么它会紧跟着一个txt文件,实现的是对文件内容停用词检索与执行结果输出到文件的操作功能;也存在下一个字符是程序未定义的参数字符如‘m’、'n'等,这时程序应当是无法识别这类命令参数的,不会执行任何操作,但一般也不会报错。获取待处理文件名和结果输出文件名,通过指令中是否含有-o指令判断是否采用默认的result.txt文件输出。以及获得输出文件名。本项目仅实现了文件的字符数、行数、单词数的统计。即分为一个主类和获取字符数、行数、单词数方、输出方法和main方法。待处理文件放在项目的统一文件夹内。

上述的部分代码展示如下:

在编译时输入指令,所以指令被储存在args[]数组中,区分默认的储存文件和用户自定义文件。统计指令中的.txt指令数,然后经过if判断获得待处理文件名

统计文件字符数时,对字符进行判断,如果读取的某一个字符为/,并且下一个字符也为/时,则后面的字符均为注释,否则继续自增

统计非正确单词数时,仅以一个或者空格或逗号作为分隔符。

统计包括空行在内的文件行数:

将统计内容输出到文件

测试设计

对于程序测试这一块,我一共设计了10个测试用例,其中包括8个相互独立的常规测试用例和2种类型的错误测试用例。具体测试如下:

1. 基本字符测试

输入:–c test.txt

期望输出:字符数:148

实际输出:字符数:148

分析:符合预期输出

2. 行数字符测试

输入:-l test.txt

期望输出:,文件总行数:7

实际输出:文件总行数:7

分析:符合预期输入

3. 单词测试

输入:-w test.txt

期望输出:,文件总行数:20

实际输出:文件总行数:20

分析:符合预期输入

4. 基本功能测试

输入:-c -w -l test.txt

期望输出:字符个数:148

       单词个数:20

       文件总行数:7

实际输出:字符个数:148

     单词个数:20

     文件总行数:7

分析:符合预期输出

5. 部分扩展功能测试

输入:-c test.txt stoplist.txt -o output.txt

期望输出:字符数:143

实际输出:字符数:143

分析:符合预期输出

6. 错误指令测试一(纯未定义命令参数)

输入:-m test.txt

期望输出:无期望

实际输出:无任何内容,但也未报错

分析:由于并未涉及命令参数-m,故而程序无法识别对应指令无法执行。

7. 错误指令测试二(含未定义命令参数)

输入:-c -m test.txt

期望输出:无期望

实际输出:字符个数:148

分析:由于命令语句中含有已定义的命令参数-c,故而虽然含有-m,但是程序依然识别了-c并且执行了字符统计功能。

以上除-|指令以外均在dos界面测试,-|指令在dos界面未知错误,无任何输出,但是在IDEA中输出没有任何问题。希望在接下来的时间内会发现错误所在。

项目总结

总的说来,这次项目确实让我收获了不少东西,一开始因为要求的细节过于繁琐而且时常所以有些情绪化,在项目设计和开发的过程中没有完全静下心来去好好地想一下如何解决这个问题。随着提交时间的逼近才逐渐硬着头皮开始认真去搞这个作业,从最终的结果来看,确实学到了很多有用的东西,关于注释行、代码行与空行的正则表达式匹配判定法以及如何从提高一个程序的条件覆盖率去编写测试用例测试程序的性能,这些都是以后走向工作岗位很宝贵、很重要的东西。不过由于时间的仓促,我编写的程序仍存在着很多不尽如人意的地方,相关的测试用例的设计也有一定的缺憾和漏洞,这些都是我在今后学习中要去学习改进的地方。

文件内容统计:对任意给定的.txt文件进行内容的字符数、行数、单词数进行统计的更多相关文章

  1. 2.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到F盘下任意目录

    package cn.it.text; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  2. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

  3. C# 读取大文件 (可以读取3GB大小的txt文件)

    原文:C# 读取大文件 (可以读取3GB大小的txt文件) 在处理大数据时,有可能 会碰到 超过3GB大小的文件,如果通过 记事本 或 NotePad++去打开它,会报错,读不到任何文件. 如果你只是 ...

  4. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  5. python操作txt文件中数据教程[2]-python提取txt文件

    python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...

  6. OpenCV C++ 计算文件夹中对象文件数目及批量处理后保存到txt文件

    //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 //#include <afx.h> //和windows.h是一样的作用 #include <opencv2/ ...

  7. OpenCV2类批量处理文件夹及文件图像 及批量处理后保存到txt文件

    //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 //#include <afx.h> //和windows.h是一样的作用 #include <opencv2/ ...

  8. Windows/Ubuntu下,将所有文件名字列举出来并保存到txt文件中

    Windows下 使用如下的DOS命令来实现: dir /s /b > lists.txt 可以将当前路径下的所有文件的"文件路径+文件名"存储在lists.txt中. 其中 ...

  9. 复制D:\\day05目录下的所有文件到D:\\copy,并将.txt文件改为.java文件。

    **解题思路: 1.首先定义一个静态的refile方法,参数传入两个文件路径 2.要复制目录下的所有文件,首先查询File类的方法,可以使用listFiles方法得到目录下的文件 3.想到这问题基本就 ...

随机推荐

  1. double compare 0

    因为double类型或float类型都是有精度的,其实都是取的近似值,所以有个误差.和一个很小的数比如0.00000001(1e-8)比较就是为了在这个误差范围内进行比较. 举个例子如double b ...

  2. Mac PD 虚拟机 鼠标双击 输入 "c" 解决

    Mac PD 虚拟机 鼠标双击 输入 "c" 解决 特么的, 是屏幕取词软件引起的.. 关闭就好了.

  3. 关闭pycharm自动更新

    如下图:

  4. 目前流行前端几大UI框架

    title: "Windows照片查看器-召回大法" categories: windows tags: windows author: LIUREN --- Windows照片查 ...

  5. 关于4A(统一安全管理平台)系统的理解

    1. 4A系统的需求分析 近年来企业用户的业务系统发展十分迅速,内部的系统数和用户数不断增加,网络规模迅速扩大,在应用扩展的同时,各业务系统的安全管理工作相对滞后,无法满足企业发展的长期要求. 各系统 ...

  6. phpexcel 导入超过26列、处理时间格式

    见地址:http://www.thinkphp.cn/topic/33376.html excel处理时间: https://blog.csdn.net/xqd890608/article/detai ...

  7. OpenLayers Node环境安装运行构建-支持Vue集成OpenLayers

    NodeJS 环境安装包下载:https://nodejs.org/zh-cn/download/ 安装vue-cli3.0.1: https://cli.vuejs.org/guide/instal ...

  8. CentOS 6.5 x64下查找依赖包,或用YUM安装

    查看某个命令YUM上的安装源 1)当某个命令不存时进行查询所依赖的包,如:pstree [root@localhost ~]# yum provides pstree 已加载插件:fastestmir ...

  9. 用.NET开发的磁力搜索引擎——btbook.net

    UPDATE:目前项目已停止维护,本文仅留作纪念. 去年10月份开始研究相关的协议与资料,中途乱七八糟的事情差点没坚持下来,寒假里修修补补上礼拜把Btbook发布了,经过社交网络的推广之后,上线第三天 ...

  10. linux环境快速安装python3

    之前在linux上安装python3的时候,为了让不影响linux环境原有的python2的环境,选择的方法都是下载对应的linux环境的python包,不过 这里需要注意的是,不要更改linux默认 ...