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文件。

 

程序打开后的界面:

程序执行:

测试文件和文件写入结果:

 

 

 

 


 

posted @ 2018-10-21 16:22  Joker_zou  阅读(443)  评论(0编辑  收藏  举报