WordCount

Posted ocapp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WordCount相关的知识,希望对你有一定的参考价值。

码云链接:https://gitee.com/ocapp/WordCount.git

解题思路:

看到这个题目,我想到的用先判断操作指令,然后将文件读入,以统计字符数的等信息,并将其写入到指定文件中,读写文件的操作用C#封装好的类很容易实现,

所以我决定用C#实现。

具体实现:

因为这个项目需要完成的操作比较简单,所以我写了两个类分别用于读文件和写文件。

读文件:

用一个char类型的c一个一个读入文件字符,读入一个则字符数+1,当遇到”,“和空格,则单词数+1,行数定义为只要分行,不管此行有无代码,即算一行,所以当字符c == “ ",

行数+1。

while((c =sr.Read()) != -1) //一个一个读取字符
            {
                charNumber++;  //没读一个字符,字符数+1
                if ((char)c == , || (char)c ==  )
                    wordNumber++;     //遇到逗号或者空格,单词数+1
                if ((char)c == 
) //遇到转行符,行数+1
                    lineNumber++;
                lst.Add((char)c);
            }

 

写文件:

用type[]数组存入判定指令,当指令出现,则执行相应操作并将结果输出到result.txt文件里

//type存入的是指令,分别是字符、单词和行数的标志
            bool writeChar = false;  //各种指令
            bool writeWord = false;
            bool writeLine = false;
            LoadFile load = new LoadFile();
            load.Load(filename);
            for(int i = 0;i < 3;i++)
            {
                if (type[0] == "c")   //判断指令,如果指令为真,则将想要结果写入文件里
                    writeChar = true;
                if (type[1] == "w")
                    writeWord = true;
                if (type[2] == "l")
                    writeLine = true;
            }

在主函数里循环获得指令

for(int i = 0;i < 4;i++)    //循环四次,每次获得一行指令
			{
				line = Convert.ToString(Console.ReadLine());
				if (line.Length < 10)
				{
					Console.WriteLine("出错");
					break;
				}
				
				str = line.Substring(8, 1);//获取指令
				if (str == "c")
					type[0] = str;
				if (str == "w")
					type[1] = str;
				if (str == "l")
					type[2] = str;
				if (str == "o")
				{				
					break;
				}
				filename = line.Substring(10);				
			}

  

测试用例:

测试文件是file.c 输出文件是result.txt

测试各个功能是否能够实现

技术分享图片

结果:

技术分享图片

错误输入指令,输出“出错”

技术分享图片

测试ReadFile类

LoadFile reader = new LoadFile();
            reader.Load("file.c");
            Console.WriteLine(reader.charNumber);  //输出文件的统计信息
            Console.WriteLine(reader.wordNumber);
            Console.WriteLine(reader.lineNumber);

结果:

技术分享图片

测试WirteFile类

string[] type = { "c", "w", "l" };
            WriteFile write = new WriteFile();
            write.Write("file.c", type); //传入指令和文件

结果:

技术分享图片

以上是关于WordCount的主要内容,如果未能解决你的问题,请参考以下文章

hadoop之WordCount源代码分析

Hadoop中WordCount代码-直接加载hadoop的配置文件

WordCount代码实现及测试

Hadoop- Wordcount程序原理及代码实现

wordcount代码实现详解

如何运行自带wordcount-Hadoop2