WordCount程序编码与测试心得

一、源代码地址

  https://github.com/EzioBBD/WordCount

 

二、个人开发流程

 

 

三、解题思路

1.程序采用C#语言,因为C#有着丰富的类库,且对于字符串操作简单。

2.程序的核心是用正则表达式做格式控制,解决了很多棘手的问题。(详见http://www.runoob.com/regexp/regexp-syntax.html)

3.对命令行语言逐条分析,接着对文件进行读取,写入等操作

4.大量使用LIst<>泛型容器,存取中间过程要保存的信息

 

四、关键代码实现

1.-c -w -l -a功能的实现

 1         //获取字符数
 2         static string GetCharNum(string fileName)
 3         {
 4             string text = File.ReadAllText(fileName);
 5             return fileName + ",字符数:" + text.Length.ToString() + "\r\n";
 6         }
 7         //获取单词数
 8         static string GetWordNum(string fileName)
 9         {
10             string[] text = File.ReadAllLines(fileName);
11             int wordNum = 0;
12             foreach (string line in text)
13             {
14                 if (Regex.IsMatch(line, @"^\s*$"))
15                     continue;
16                 string removed = Regex.Replace(line, @"^\s*|\s*$", "");
17                 string[] words = removed.Split(new char[] { ' ', ','});
18                 
19                 if (stopList.Count == 0)
20                     wordNum += words.Length;
21                 else
22                     foreach (string word in words)
23                         if (!stopList.Contains(word))
24                             ++wordNum;
25             }
26             return fileName + ",单词数:" + wordNum.ToString() + "\r\n";
27         }
28         //获取行数
29         static string GetLineNum(string fileName)
30         {
31             string[] text = File.ReadAllLines(fileName);
32             return fileName + ",行数:" + text.Length.ToString() + "\r\n";
33         }
34         //获取代码行/空行/注释行
35         static string GetMoreInfo(string fileName)
36         {
37             int codeLine = 0, blankLine = 0, noteLine = 0;
38             string[] text = File.ReadAllLines(fileName);
39             foreach (string line in text)
40             {
41                 if (Regex.IsMatch(line, @"^\s*{?\s*$"))
42                     ++blankLine;
43                 else if (Regex.IsMatch(line, @"^}?//"))
44                     ++noteLine;
45                 else
46                     ++codeLine;
47             }
48             return fileName + ",代码行/空行/注释行:" + codeLine.ToString() + "/"
49                 + blankLine.ToString() + "/" + noteLine.ToString() + "\r\n";
50         }

2.递归处理目录下的所有符合的文件

1       static void DisposeAllFile(string path, string pattern)
2         {
3             DirectoryInfo root = new DirectoryInfo(path);
4             foreach(FileInfo file in root.GetFiles())
5                 if (Regex.IsMatch(file.Name, pattern))
6                     files.Add(file.FullName);
7             foreach (DirectoryInfo directory in root.GetDirectories())
8                 DisposeAllFile(directory.FullName, pattern);
9         }

 

五、测试用例实现

1.基本功能测试

例如: wc.exe -c -w -l test.c -o output.txt

    wc.exe -c test.c

    wc.exe -w -l test.c

    wc.exe -w -l -c test.c

    wc.exe -l -w test.c

2.扩展功能测试

例如:    wc.exe -s  *.c 

    wc.exe -a *.c

    wc.exe -s -w -a *.c

    wc.exe -s -l -a *.c -e stoplist.txt

    wc.exe -s -c -l -w -a *.c -e stoplist.txt -o output.txt

3.导致程序高风险的地方

  a.输入一个不存在的文件名

  b.-e和-o单独存在,不关联任何文件,例如:wc.exe -s -w -a *.c -e

 

 六、参考文献

正则表达式的使用:http://www.runoob.com/regexp/regexp-syntax.html

  

 

转载于:https://www.cnblogs.com/Ez1o/p/8604005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值