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

时间:2022-07-11 06:29:36

项目源码地址: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方法。待处理文件放在项目的统一文件夹内。

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

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

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

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

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

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

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

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

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

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

将统计内容输出到文件

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

测试设计

对于程序测试这一块,我一共设计了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并且执行了字符统计功能。

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

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

项目总结

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