WordCount基本功能
WordCount基本功能
码云地址:https://gitee.com/Joker_zou/WordCount.git
一.项目需求
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
二.上手前的构思
- 在刚看到项目的时候,我认为这个项目主要的难度应该在于文件的读写方面。读出目标文件的所有信息,然后将这些信息经过处理,产生的结果输入到另外一个文件里面。于是我先没有考虑最后要实现的功能,而是学习C#中文件的读写。由于C#中关于文件读写的操作比较简单,所以这个阶段并不是太难。
- 之后我开始关注真正实现功能的部分,字符数统计,单词数统计,行数统计,文件写入这4个功能我决定分别写一个方法,定义在一个类中,在主函数里面调用这几个方法。由于技术能力的不足,目前我也仅完成了基础功能。
三.代码实现
1.定义全局数组,用来储存将会写入文件的信息
1 public static string[] Information = {"","",""};//定义写入文件的3种信息
2.统计字符数的方法
1 //统计字符数的方法 2 public int CharCount(string fileName) 3 { 4 FileStream fs = new FileStream(fileName, FileMode.Open);//打开文件 5 string wordsNumber = Convert.ToString(fs.Length);//读出文件中的长度信息,即字符数 6 fs.Close(); 7 Console.Write("字符统计成功 "); 8 return int.Parse(wordsNumber);//返回读出的字符数 9 }
3.统计单词数的方法
1 //统计单词数的方法 2 public int WordCount(string fileName) 3 { 4 FileStream fs = new FileStream(fileName, FileMode.Open);//打开文件 5 StreamReader sr = new StreamReader(fs, Encoding.Default);//用特定方式读取文件中信息 6 string s = sr.ReadToEnd();//读出所有信息 7 fs.Close(); 8 sr.Close(); 9 char[] c = { ' ', ',', ','};//定义跳过的字符类型 10 string[] words = s.Split(c, StringSplitOptions.RemoveEmptyEntries);//将读出的信息按跳过的字符类型,分割成字符串 11 Console.Write("单词统计成功 "); 12 return words.Length;//返回字符串的个数,即单词数 13 }
4.统计行数的方法
1 //统计行数的方法 2 public int RowsCount(string fileName) 3 { 4 FileStream fs = new FileStream(fileName, FileMode.Open);//打开文件 5 StreamReader sr = new StreamReader(fs, Encoding.Default);//用特定方式读取文件中信息 6 string s = sr.ReadToEnd();//读出所有信息 7 fs.Close(); 8 sr.Close(); 9 char[] c = { '\n' };//定义跳过的字符类型,换行符 10 string[] words = s.Split(c, StringSplitOptions.RemoveEmptyEntries);//将读出的信息按跳过的字符类型,分割成字符串 11 Console.Write("行数统计成功 "); 12 return words.Length;//返回字符串的个数,即行数 13 }
5.写入文件的方法
1 //写入文件的方法 2 public void WriteIn() 3 { 4 FileStream fs = new FileStream("F:\\result.txt", FileMode.Create);//定义文件操作类型,实例化 5 StreamWriter sw = new StreamWriter(fs);//用特定方式写入信息,实例化 6 for (int i=0;i<3;i++) 7 { 8 sw.Write(Information[i]);//写入第i种信息 9 sw.Write("\r\n");//换行 10 } 11 sw.Flush(); 12 sw.Close(); 13 fs.Close(); 14 Console.Write("文件写入成功 "); 15 }
2-5的四个方法全部写入returnInformation类中,以供主函数调用
6.主函数代码
1 static void Main(string[] args) 2 { 3 string fileName = "test.txt";//被执行的文件 4 returnInformation rNumber = new returnInformation();//实例化文档操作类 5 Console.Write("wc.exe "); 6 7 string message=Console.ReadLine();//读取写入的各种操作符(-c -w -l -o),顺序可颠倒 8 char[] c = { ' ' };//操作符之间由空格分开 9 string[] s = message.Split(c, StringSplitOptions.RemoveEmptyEntries);//将分开的命令写入数组 10 11 int[] returnNumber = { -1, -1, -1 ,-1};//最终返回的文档数据 12 for(int i=0;i<s.Length;i++) 13 { 14 //对相应的命令执行相应的操作,结果写入returnNumber 15 if(s[i]=="-c") 16 { 17 returnNumber[i] = rNumber.CharCount(fileName); 18 Console.Write("字符数是:" + returnNumber[i] + " "); 19 Information[i] = "字符数是:" + returnNumber[i] + " "; 20 } 21 else if(s[i]=="-w") 22 { 23 returnNumber[i] = rNumber.WordCount(fileName); 24 Console.Write("单词数是:" + returnNumber[i] + " "); 25 Information[i] = "单词数是:" + returnNumber[i] + " "; 26 } 27 else if(s[i]=="-l") 28 { 29 returnNumber[i] = rNumber.RowsCount(fileName); 30 Console.Write("行数是:" + returnNumber[i] + " "); 31 Information[i] = "行数是:" + returnNumber[i] + " "; 32 } 33 else if (s[i] == "-o") 34 { 35 rNumber.WriteIn(); 36 } 37 } 38 Console.WriteLine("程序结束,任意键结束!"); 39 Console.ReadLine(); 40 }
这个程序所处理的文件只能是默认路径下的test.txt文件,输出在F盘里的result.txt文件。
程序打开后的界面:
程序执行:
测试文件和文件写入结果: