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基本功能的更多相关文章

  1. 软件工程:java实现wordcount基本功能

    github链接:https://github.com/Nancy0611/wc 一:项目相关要求 该项目能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功 ...

  2. WordCount 基础功能

    软测第一次作业 该项目在码云上的地址: https://gitee.com/zhege/WordCount 一,概述 WordCount的基础功能需求分析大致如下:对程序设计语言源文件统计字符数.单词 ...

  3. 个人项目WordCount基础功能

    码云地址:https://gitee.com/stedylan/WordCount 1.PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 1 ...

  4. WordCount扩展与优化

    合作者:201631062327,201631062128码云地址:https://gitee.com/LIUJIA6/WordCount3 一:项目说明 本次项目是在上次作业WorldCount的基 ...

  5. MapReduce程序(一)——wordCount

    写在前面:WordCount的功能是统计输入文件中每个单词出现的次数.基本解决思路就是将文本内容切分成单词,将其中相同的单词聚集在一起,统计其数量作为该单词的出现次数输出. 1.MapReduce之w ...

  6. Hive实现WordCount详解

    一.WordCount原理 初学MapReduce编程,WordCount作为入门经典,类似于初学编程时的Hello World.WordCount的逻辑就是给定一个/多个文本,统计出文本中每次单词/ ...

  7. hadoop 入门实例【转】

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 1.数据去重  "数据去重"主要是为了掌握 ...

  8. Hadoop MapReduce编程学习

    一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有  conf.set("map ...

  9. Hadoop集群(第9期)_MapReduce初级案例

    1.数据去重  "数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就 ...

随机推荐

  1. 1、vue 笔记之 组件

    1.组件个人理解:  <组件>是页面的一部分,将界面切分成部分,每部分称为 <组件>   2.组件化思想:          //2.1.定义一个全局的组件,组件支持‘驼峰命名 ...

  2. python数据结构-如何快速找到多个字典中的公共键

    如何快速找到多个字典中的公共键 问题举例 统计每轮都进球的球员: 第1轮{‘tom’:1, 'meixi':2} 第2轮{‘coco’:3, 'meixi':4, 'marton':2} 第3轮{'c ...

  3. Asianux 7.3安装Oracle 11.2.0.4单实例体验

    环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的最小安装部署,Oracle安装额外需要的包统一使用yum安装. 查看当前系统相关信息: [root@ ...

  4. puppeteer(一)环境搭建——新Web自动化工具(同selenium)

    一.简介 https://github.com/GoogleChrome/puppeteer Puppeteer是一个Node库,它提供了一个高级API来控制DevTools协议上的 Chrome或C ...

  5. tensorflow输出

    在Session对象上调用run()函数,执行流图,即可得到输出, 可获取单个输出,也可获取多个输出 import tensorflow as tf import numpy as np consta ...

  6. sersync 开机自启 (仅供自己参考)

    sersync是一个实时同步的软件,,将其添加到/etc/rc.local中没有效果 ##之所以没效果是因为:####由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以 ...

  7. re正则匹配

    import re #'(?P<name>...)' 分组匹配print(re.search("(?P<id>[0-9]+)","abc12345 ...

  8. python split()函数的用法

    转自: https://blog.csdn.net/orangefly0214/article/details/80810449 函数:split() Python中有split()和os.path. ...

  9. inux下输入ifconfig命令,没有eth0,怎么解决

    用ifconfig命令,只有lo,没有eth0的解决方案 问题描述:视频中输入ifconfig命令,显示eth0和lo,但是自己在虚拟机中并非得到这样的结果,而是只有lo,即网卡未启动,也没有ip,无 ...

  10. 【题解】Luogu P2730 魔板

    蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...