WordCount命令行程序通过CMD接收参数,输出统计结果到指定文件。

项目码云地址:https://gitee.com/ggtc/WordCount.git

实现的功能有:

统计文件字符数

 1 using System.IO;
2
3 namespace WordCount
4 {
5 public class ClassCharCount:InterfaceCommandable
6 {
7 public string Count(string fileName)
8 {
9 string strResult = "字符数:";
10 try
11 {
12 FileStream fs = new FileStream(fileName, FileMode.Open);
13 strResult += Convert.ToString(fs.Length);
14 fs.Close();
15 Console.WriteLine("字符数统计成功");
16 return strResult;
17 }
18 catch
19 {
20 Console.WriteLine("文件打开失败");
21 return strResult;
22 }
23 }
24 }
25 }

统计单词个数(逗号,空格分隔)

 1 using System.IO;
2
3 namespace WordCount
4 {
5 class ClassWordCount:InterfaceCommandable
6 {
7 public string Count(string fileName)
8 {
9 string strResult = "单词数:";
10 try
11 {
12 FileStream fs = new FileStream(fileName, FileMode.Open);
13 StreamReader sr = new StreamReader(fs, Encoding.Default);
14 string sen = Convert.ToString(sr.ReadToEnd());
15 // Console.WriteLine(sen);//检查读文件结果
16 fs.Close();
17 sr.Close();
18 char[] separator={',',' ',','};//中英文逗号及空格
19 string[] words = sen.Split(separator, StringSplitOptions.RemoveEmptyEntries);//按指定字符分割字符串
20 strResult += Convert.ToString(words.Length);
21 Console.WriteLine("单词数统计成功");
22 return strResult;
23 }
24 catch
25 {
26 Console.WriteLine("文件打开失败");
27 return strResult;
28 }
29 }
30
31 /* public string DeleteComments(string fs)//去注释
32 {
33 string subString = "";
34 int[] comments,
35 return subString;
36 }*/
37 }
38 }

统计文件行数(换行符为准)

 1 using System.IO;
2
3 namespace WordCount
4 {
5 class ClassRowsCount:InterfaceCommandable
6 {
7 public string Count(string fileName)
8 {
9 string strResult = "行数:";
10 try
11 {
12 FileStream fs = new FileStream(fileName, FileMode.Open);
13 StreamReader sr = new StreamReader(fs, Encoding.Default);
14 string sen = Convert.ToString(sr.ReadToEnd());
15 // Console.WriteLine(sen);//检查读文件结果
16 fs.Close();
17 sr.Close();
18
19 char[] separator = { '\n'};
20 string[] Rows = sen.Split(separator, StringSplitOptions.RemoveEmptyEntries);//按指定字符分割字符串
21 strResult += Convert.ToString(Rows.Length);
22 Console.WriteLine("行数统计成功");
23 return strResult;
24 }
25 catch
26 {
27 Console.WriteLine("打开文件失败");
28 return strResult;
29 }
30 }
31 }
32 }

以上三个类实现这个接口

1 interface InterfaceCommandable
2 {
3 string Count(string fileName);
4 }

更改默认输出文件

 1  public static void ChangePrint(string fileName)
2 {
3 try
4 {
5 StreamWriter sw = new StreamWriter("resultposition.txt");
6 sw.Write(fileName);
7 sw.Close();
8 Console.WriteLine("输出地址更改成功");
9 }
10 catch
11 {
12 Console.WriteLine("输出地址更改失败");
13 }
14
15 }
 1 //用于在模块间传递数据
2 string strResult = "";
3 //将输入传给处理模块
4 strResult = ClassCountDeal.CountDeal(args);
5 //根据输出地址调用输出模块将统计结果输出到指定文件
6 StreamReader sr = new StreamReader("resultposition.txt");
7 string position=sr.ReadToEnd();
8 sr.Close();
9 if(position=="")
10 {
11 OutClass.Print(strResult);
12 }
13 else
14 {
15
16 OutClass.Print(strResult, position);
17 }

输出模块

仅仅接收统计结果输出到指定文件

 1 using System.IO;
2
3 namespace WordCount
4 {
5 public static class OutClass
6 {
7 public static void Print(string strResult)
8 {
9 try
10 {
11 StreamWriter sw = new StreamWriter("result.txt");
12 sw.WriteLine(strResult);//将结果写入默认文件
13 Console.WriteLine("数据写入成功");
14 sw.Close();
15 }
16 catch
17 {
18 Console.WriteLine("数据写入失败");
19 }
20 }
21
22 public static void Print(string strResult,string args)
23 {
24 try
25 {
26 StreamWriter sw = new StreamWriter(args);
27 sw.WriteLine(strResult);//将结果写入指定文件
28 Console.WriteLine("数据写入成功");
29 sw.Close();
30 }
31 catch
32 {
33 Console.WriteLine("数据写入失败");
34 }
35 }
36 }
37 }

根据输入参数调用统计模块

一共有四个命令-c,统计字符数;-w,统计单词数;-l,统计行数;-o,更换输出文件。后面加要统计的文件名。

 1 public static class ClassCountDeal
2 {
3 public static string CountDeal(string[] args)
4 {
5 string strResult = "";
6 //根据用户参数个数调用统计模块
7 int i=0;
8 while(i<args.Length-1)
9 {
10 switch (args[i])
11 {
12 //统计字符数
13 case "-c":
14 InterfaceCommandable ccmd = new ClassCharCount();
15 strResult += ccmd.Count(args[args.Length-1]) + '\n';
16 break;
17 //统计单词数
18 case "-w":
19 InterfaceCommandable wcmd = new ClassWordCount();
20 strResult += wcmd.Count(args[args.Length - 1]) + '\n';
21 break;
22 //统计行数,换行符为准
23 case "-l":
24 InterfaceCommandable lcmd = new ClassRowsCount();
25 strResult += lcmd.Count(args[args.Length - 1]) + '\n';
26 break;
27 case "-o":
28 //更改输出到用户指定的文件
29 OutClass.ChangePrint(args[args.Length - 1]);
30 break;
31 default:
32 Console.WriteLine("命令错误");
33 break;
34 }
35 i++;
36 }
37 //返回统计结果
38 return strResult;
39 }
40 }

我通过 strResult 这个变量在各个模块间传输统计数据。

附上运行截图在此:

//跳转到程序所在目录

//输入命令和要统计的文件名

结果如下:

测试一下更改输出地址

嗯?看看存放数据文件的名字的记录文件已经改了啊?

删除掉地址文件里的数据

再试一下写入:

但是

看来运行没错,我的提示语句有了点小小的Bug~

修改判断如下

CMD文件内容统计程序简单版本的更多相关文章

  1. 文件内容统计:对任意给定的.txt文件进行内容的字符数、行数、单词数进行统计

    项目源码地址:https://gitee.com/xjtsh/projects 功能实现: wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file ...

  2. cmd文件内容添加到文件内容命令

    今天需要因为有点SQL文件需要添加修改,但是感觉是做运维工作得当然不能一个一个来了.搞了半天bat才找到这个命令(真是一个不合格的运维) 例如:a.txt 内容添加到 b.txt (不是覆盖,而是在 ...

  3. 文件内容统计——Linux wc命令

    有了该命令,就可以得到当前目录下所有符合条件的文件总数,如下: find -type f | wc -l 这个命令的功能也很好记,因为它功能很有限: wc -c filename:显示一个文件的字节数 ...

  4. DSP6455的cmd文件

    DSP6455的cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义 ...

  5. [译]在Linux中清空或删除大文件内容的5种方法

    原文来源: https://www.tecmint.com/empty-delete-file-content-linux/ 有时,在处理Linux终端中的文件时,您可能希望清除文件的内容,而无需使用 ...

  6. 用C#Winform写个简单的批量清空文件内容和删除文件的小工具

    用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...

  7. MFC Wizard创建的空应用程序中各个文件内容的解析

    创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_W ...

  8. Golang: 读取文件并统计内容

    上次我们从命令行接收用户输入,并统计了每次输入内容出现的次数,今天对程序加以改造,使其能够读取文件内容,并统计每行文本出现的次数. 首先,我们把接收输入的逻辑封装成一个函数: // scan.go p ...

  9. Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...

  10. Sed 静默替换文件内容 以及 awk 的简单使用

    1. Sed的help 鸟哥说的 学东西 先看 help 先看man 再google 不好FQ再百度.. Usage: sed [OPTION]... {script-only-if-no-other ...

随机推荐

  1. 搭载KaihongOS的工业平板、机器人、无人机等产品通过3.2版本兼容性测评,持续繁荣OpenHarmony生态

    近日,搭载深圳开鸿数字产业发展有限公司(简称"深开鸿")KaihongOS 软件发行版的工业平板.机器人.无人机等商用产品均通过 OpenAtom OpenHarmony(以下简称 ...

  2. springboot多模块项目启动经历

    springboot多模块使用 @ 目录 springboot多模块使用 前言 大佬把项目权限给我了,我就先下下来看看学习一下 一.识别 二.maven配置 1.安装maven 三.加载刷新 总结 前 ...

  3. pid算法函数实现,c语言版

    #include <stdio.h> float pid(float setpoint, float process_variable, float kp, float ki, float ...

  4. 关于mac使用figma以及企业微信3.1.18版本,CPU系统占用率飙升至70%

    问题描述 使用一段时间正常,不知道是修改了什么设置,还是有什么软件冲突,导致cpu使用率极高 系统进程中有一个 kernel_task 占用了大量的cpu 并且该占用并不会消失,只要figma打开就会 ...

  5. 2024年GPLT团体程序设计比赛L2-D吉利矩阵题解

    只能说比赛时前期做得太慢了,后面导致题目只能捞点分数(IOI赛制),当时这道题是我不剪枝DFS拿了4分,压线拿铜牌! 考完试一做,发现是个大水题(bushi) 主要原理:DFS(深度优先搜索) + 剪 ...

  6. SRC信息收集方法论

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" SRC信息 ...

  7. 力扣657(java & python)-机器人能否返回原点(简单)

    题目: 在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串 moves 表示.字符 move[i] 表示 ...

  8. Java工具篇之Disruptor高性能队列

    简介: disruptor适用于多个线程之间的消息队列,`作用与ArrayBlockingQueue有相似之处`,但是disruptor从功能.性能都远好于ArrayBlockingQueue,当多个 ...

  9. 说说关系型数据库与Serverless

    简介: 看到如今Serverless在云计算行业喷薄欲出的态势,像极了<星星之火,可以燎原>中的描述:虽然不能预测未来的发展和变化,但对于云计算来说这是个相对确定的方向.本文从产业界和学术 ...

  10. 深度解密|基于 eBPF 的 Kubernetes 问题排查全景图发布

    ​简介:通过 eBPF 无侵入地采集多语言.多网络协议的黄金指标/网络指标/Trace,通过关联 Kubernetes 对象.应用.云服务等各种上下文,同时在需要进一步下钻的时候提供专业化的监测工具( ...