随笔-2  评论-0  文章-0 

WordCount的基本功能及扩展功能(两人组队完成)

合作者:201631062118,201631062217
项目gitee链接:https://gitee.com/suiran90/wc/ (注:由于gitee操作不熟练,此次我们两人代码上传时出现问题,商议为由我上传,相关操作正在学习)
本次作业链接地址:https://edu.cnblogs.com/campus/xnsy/2018softwaretest2398/homework/2187

代码互审情况

在上一个项目中,我们各自完成了 wordcount 的基础功能,但由于各自单独编写,出现了许多小问题,在这里举出:
1.在比较两个字符是否相同时,使用 args[i].equals(“-o”) ,若参数 args[i] 缺失,会使程序出现Bug,应该使用 "-o".equals(args[i]) ;
2.命名问题,出现某些无意义变量,类似 int a 之类;
3.变量,函数命名字母大小写问题;
4.某些注释不清楚问题

代码互审情况 :

静态代码检查情况:

出现了下列代码检查情况

单元测试情况:

对测试代码实现语句覆盖
-a:

-s:

-e:

相关函数

当用户选择读取 代码行、空行、注释行

Encoding encode = Encoding.GetEncoding("GB2312");  
FileStream fs = new FileStream(filename, FileMode.Open);
StreamReader sr = new StreamReader(fs, encode);

来对文件操作,其中使用 "GB2312" 可以对中文字符正常读取,filename 参数为文件路径。

代码说明

Rows.cs(读取行数)

 //空行数
        public int BlankLines(string filename)//传入文件位置字符串
        {
            //打开文件
            Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
            //fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            StreamReader sr = new StreamReader(fs, encode);

            string line;
            int NumberOfBlankLines = 0;//记录行数

            //当当前行不为空,即当前行存在,即 +1 
            while ((line = sr.ReadLine()) != null)
            {
                while (line == "")
                {
                    NumberOfBlankLines++;
                    break;//统计一次,退出,否则会死循环
                }
            }            
 //           Console.WriteLine("Black line:" + NumberOfBlankLines);//显示行数

            //关闭文件
            sr.Close();
            fs.Close();

            return NumberOfBlankLines;//注意函数是有返回值的
        }

        //注释行        
        public int CommentLines(string filename)//传入文件位置字符串
        {
            //打开文件
            Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
            //fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            StreamReader sr = new StreamReader(fs, encode);

            string line;
            int NumberOfCommentLines = 0;//记录行数

            //当当前行不为空,即当前行存在,即 +1 
            while ((line = sr.ReadLine()) != null)
            {
                char[] ArrayChar = line.ToCharArray();
                if (ArrayChar.Length >= 2)
                {
                    for (int i = 0; i < ArrayChar.Length - 1; i++)//防止越界
                    {
                        if ((ArrayChar[i] == '/' && ArrayChar[i + 1] == '/'))
                        {
                            NumberOfCommentLines++;
                            break;
                        }
                    }
                }                
            }
  //          Console.WriteLine("Black line:" + NumberOfCommentLines);//显示行数

            //关闭文件
            sr.Close();
            fs.Close();

            return NumberOfCommentLines;//注意函数是有返回值的
        }

        //代码行
        public int CodeLines(string filename)//传入文件位置字符串
        {
            //打开文件
            Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取

            //fs只读方式打开文件,错误,需要共享锁,要选择flieShare方式为ReadWrite,否则会错误
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            StreamReader sr = new StreamReader(fs, encode);

            string line;

            int NumberOfBlankLines = 0;//记录空白行数
            NumberOfBlankLines = BlankLines(filename);
            //当当前行不为空,即当前行存在,即 +1 
            int CountLine = 0;//记录总行数
            int NumberOfCommentLines = 0;
            NumberOfCommentLines = CommentLines(filename);
            //当当前行不为空,即当前行存在,即 +1 
            while ((line = sr.ReadLine()) != null)
            {
                CountLine++;
            }
            Console.WriteLine("Code line:" + (CountLine - NumberOfBlankLines - NumberOfCommentLines)
                + "\nBlack Line:" + NumberOfBlankLines + "\nComment Line:" + NumberOfCommentLines + "\n");//显示行数

            //关闭文件
            sr.Close();
            fs.Close();

            return NumberOfBlankLines;//注意函数是有返回值的
        }

当读取StopList.txt时

class StopList
    {
        //总行数
        public string StopOfList()//传入文件位置字符串
        {
            string filename = System.IO.Directory.GetCurrentDirectory() + "\\StopList.txt";
            //打开文件
            Encoding encode = Encoding.GetEncoding("GB2312");//中文字符读取
            FileStream fs = new FileStream(filename, FileMode.Open);
            StreamReader sr = new StreamReader(fs, encode);

            string deactivateTable = "";

            deactivateTable = sr.ReadToEnd();
            Console.WriteLine("sop list:" + deactivateTable);
            
            //应该关闭文件
            sr.Close();
            fs.Close();

            return deactivateTable;
        }
    }

总结

1.处理读取当前目录文件,文件占用等问题,学习了前辈的文章;
2.对一个功能处理时,需要一步步思考;
3.代码编写许多相关工具是很有意思的,可以多多发掘其功能;
4.编写桩模块、驱动程序对开发很有利;
5.完成项目过程中,要有自己的计划,遵循计划,避免拖沓

参考文献链接

感谢以下文章作者的文献,让我受益良多
C#读取目录下所有指定类型文件的方法:https://blog.csdn.net/autumn20080101/article/details/52999456
c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件:https://blog.csdn.net/superhoy/article/details/7931234?utm_source=blogxgwz0

posted on 2018-10-21 20:48 大丶草包 阅读(...) 评论(...) 编辑 收藏