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

程序执行:

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


WordCount基本功能的更多相关文章
- 软件工程:java实现wordcount基本功能
github链接:https://github.com/Nancy0611/wc 一:项目相关要求 该项目能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功 ...
- WordCount 基础功能
软测第一次作业 该项目在码云上的地址: https://gitee.com/zhege/WordCount 一,概述 WordCount的基础功能需求分析大致如下:对程序设计语言源文件统计字符数.单词 ...
- 个人项目WordCount基础功能
码云地址:https://gitee.com/stedylan/WordCount 1.PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 1 ...
- WordCount扩展与优化
合作者:201631062327,201631062128码云地址:https://gitee.com/LIUJIA6/WordCount3 一:项目说明 本次项目是在上次作业WorldCount的基 ...
- MapReduce程序(一)——wordCount
写在前面:WordCount的功能是统计输入文件中每个单词出现的次数.基本解决思路就是将文本内容切分成单词,将其中相同的单词聚集在一起,统计其数量作为该单词的出现次数输出. 1.MapReduce之w ...
- Hive实现WordCount详解
一.WordCount原理 初学MapReduce编程,WordCount作为入门经典,类似于初学编程时的Hello World.WordCount的逻辑就是给定一个/多个文本,统计出文本中每次单词/ ...
- hadoop 入门实例【转】
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 1.数据去重 "数据去重"主要是为了掌握 ...
- Hadoop MapReduce编程学习
一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有 conf.set("map ...
- Hadoop集群(第9期)_MapReduce初级案例
1.数据去重 "数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就 ...
随机推荐
- day5_非空即真非零即真
非空即真(字符串.元组.列表.字典.None),非零即真(指的是int类型或数字这种) # d={}# l=[]# t=()# a = ''# b = None以上都代表空 举例1: name = i ...
- mysql 时间戳的使用!
时间转时间戳方法: unix_timestamp() 记录时间戳的类型: bigint 时间戳转时间的方法:from_timestamp() 感谢水哥给的截图!
- 解决web资源跨域请求问题
参考地址: http://my.oschina.net/lichaoqiang/blog/317823 在浏览器请求中,出现跨域访问资源的问题,我们肯定会遇到.如果跨域请求被阻止,有可能导致css.j ...
- ios dispatch_async使用
一般这样使用: dispatch_async(dispatch_get_global_queue(0, 0),^{ //进入另一个线程 dispatch_async(dispatch_get_main ...
- [js]nodejs初探http/url/fs模块
难怪我没学会, 因为我的套路有问题. 错误点, 1,大而全 2,不注重思路 学习要领: 1, 小而精 2, 重思路(总结) nodejs特点: 1.node提供了js的运行环境, 一般将node运行在 ...
- phpstorm----------phpstorm2017基本使用
1.关闭2017版本的,函数参数提示.关闭方式如下: 2.如何设置代码里面的变量等号对齐,和key => value 对齐 ctrl+alt+l 3.修改PHP文件类创建的默认注释 4. ...
- <转>jmeter(二十)阶梯式加压测试
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- 怎么让table中的<td>内容向上对齐
<td valign="top"></td>
- Python Redis 常用操作
delete(*names) # 根据删除redis中的任意数据类型 exists(name) # 检测redis的name是否存在 keys(pattern='*') # 根据模型获取redis的n ...
- CEF 右键添加开发者选项菜单项
在项目开发过程中,有时候需要进行调试测试,然后我们可以在cef上下文菜单中添加自定义开发者工具菜单项,这样会比较方便,最后效果: 实现过程: 让自己的MyClientHandler来继承 CefCon ...