1. 程式人生 > >WordCount的基本功能及擴展功能(兩人組隊完成)

WordCount的基本功能及擴展功能(兩人組隊完成)

src pen 單獨 soft 文件的 ima \n urn tails

合作者: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

WordCount的基本功能及擴展功能(兩人組隊完成)