Individual Project - Word frequency program by HJB
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class v
{
public int n { get; set; }
public string s { get; set; }
public v(int nu, string st)
{
this.n = nu;
this.s = st;
}
}
class Program
{
static void Main(string[] args)
{
if (args.Length ==1)
{
Dictionary<string, v> ht = new Dictionary<string, v>();
if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[0];
if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{
string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = "(\\b[a-zA-Z]{3}[A-Za-z0-9]+)|(\\b[a-zA-Z]{3})|((_[a-zA-Z]{3}[A-Za-z0-9]+)|(_[a-zA-Z]{3}))";
string article = File.ReadAllText(file[i]);
foreach (Match m in Regex.Matches(article, s))
{
string c = m.ToString();
if (c.Contains("_"))
{
c = c.Replace("_", "");
}
string n = c.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (c.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = c;
}
else
w.n += 1;
}
else
{
v w = new v(1, c);
ht.Add(n, w);
}
}
}
}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path + "\\黄敬博.txt", false);
foreach (var skey in re)
{
v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);
}
sw.Flush();
}
if (args[0].Equals("-e2"))
{
int j = 1;
Dictionary<string, v> ht = new Dictionary<string, v>();
if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[1];
if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{
string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = @"\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*";
string article = File.ReadAllText(file[i]);
Regex reg = new Regex(s);
Match m = reg.Match(article, 0);
while (m.Success)
{
String word = m.ToString();
string n = word.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (word.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = word;
}
else
w.n += 1;
}
else
{
v w = new v(1, word);
ht.Add(n, w);
}
m = reg.Match(article, m.Index + m.ToString().IndexOf(' '));
}
}
}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path + "\\黄敬博.txt", false);
foreach (var skey in re)
{
v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);
sw.Flush();
j++;
if (j > 10)
break;
}
}
if (args[0].Equals("-e3") )
{
int j = 1;
Dictionary<string, v> ht = new Dictionary<string, v>();
if (args.Length == 0)
{
Console.WriteLine("please input the correct file adress");
}
string path = args[1];
if (!Directory.Exists(path))
{
Console.WriteLine("wrong path");
}
else
{
if ((Directory.GetFiles(path).Length == 0) && (Directory.GetDirectories(path).Length == 0))
Console.WriteLine("empty directory");
else
{
string[] file = (Directory.GetFiles(path, "*", SearchOption.AllDirectories)).Where(s => s.EndsWith(".txt") || s.EndsWith(".h") || s.EndsWith(".cpp") || s.EndsWith(".cs")).ToArray();
int l = file.Length;
for (int i = 0; i < l; i++)
{
string s = @"\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*\s{1}\b[A-Za-z]{3,}[A-Za-z0-9]*";
string article = File.ReadAllText(file[i]);
Regex reg = new Regex(s);
Match m = reg.Match(article, 0);
while (m.Success)
{
String word = m.ToString();
string n = word.ToLower();
if (ht.ContainsKey(n))
{
v w = (v)ht[n];
if (word.CompareTo(w.s) >= 0)
{
w.n += 1;
w.s = word;
}
else
w.n += 1;
}
else
{
v w = new v(1, word);
ht.Add(n, w);
}
m = reg.Match(article, m.Index + m.ToString().IndexOf(' '));
}
}
}
}
var re = ht.OrderByDescending(v => v.Value.n).ThenBy(v => v.Value.s);
StreamWriter sw = new StreamWriter(path+"\\黄敬博.txt", false);
foreach (var skey in re)
{
v w = (v)ht[skey.Key];
sw.WriteLine(w.s + "\t" + w.n);
sw.Flush();
j++;
if (j > 10)
break;
}
}
}
}
}
代码总共由3部分组成,每部分对应相对的mode。
mode2、3是基于mode1基础上做出的一点点改变。
这个程序主要利用了Dictionary功能。key设为string,使用时将单词的小写形式作为key。value设为一个小结构,包含一个string类型的单词和一个int类型的次数。
mode1遍历的过程为按照单个单词遍历的,mode2为两个,mode3为三个。
但mode2读取完两个单词需要往回退一个,mode3读取完要往回退两个。
若读取的单词的小写形式在dictionary中已经包含了。则value中的int值+1,然后比较value中的string与当前的单词,选择ASC码靠前的那个保存。
最后按照要求输出。
Individual Project - Word frequency program by HJB的更多相关文章
- Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering
11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...
- Individual Project - Word frequency program - Multi Thread And Optimization
作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...
- Individual Project - Word frequency program——12061154Joy
Description&Requirement: http://www.cnblogs.com/jiel/p/3978727.html 项目时间估计 理解项目要求: 1h 构建项目逻辑: 1h ...
- SoftwareEngineering Individual Project - Word frequency program
说实话前面c#实在没怎么学过.这次写起来感觉非常陌生,就连怎么引用名空间都忘记了.在经过恶补后还是慢慢地适应了. 1.项目预计用时: 构建并写出大概的数据结构,程序框架及模块: 30min 实现文件夹 ...
- Individual Project - Word frequency program
1.项目预计用时 -计划学习C#和百度一些用法的时间:5小时 -项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词.计划用时:5小时 2.项目实际用时 学习C#以及正则表达式的用法:3 ...
- Record for Individual Project ( Word frequency program )
1. 预计时间 ● 对问题总体的理解.规划:10 min ● 设计编写程序:5 h ● 调试: 分模块-40 min; 总体-40min ● 测试(性能分析).改进:1 h 2. 实际用时 ● 对 ...
- THE First Individual Project - Word frequency program
第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...
- Individual Project - Word frequency program-11061171-MaoYu
BUAA Advanced Software Engineering Project: Individual Project - Word frequency program Ryan Mao (毛 ...
- Project: Individual Project - Word frequency program----11061192zmx
Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...
随机推荐
- 卸载CocoaPods
1. 移除pod组件 这条指令会告诉你Cocoapods组件装在哪里 : $ which pod 你可以手动移除这个组件 : $ sudo rm -rf <path> 2.移除 RubyG ...
- Alpha 任务状态总览(持续更新)
Alpha 任务状态总览(持续更新) Part 0 · 简 要 目 录 Part 1 · 流 程 Part 2 · 总 任 务 量 安 排 Part 3 · 爬 虫 任 务 Part 4 · 接 口 ...
- 微信小程序点击 navigator ,页面不跳转
1.navigator 对应的 url 必须配置在app.json的pages中: 2.navigator 对应的 url 不能配置在"tabBar"的"list&quo ...
- 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...
- json 压缩中文不转码
$testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON, JSON_UNESCAPED_U ...
- 如何利用Grunt生成对应的Source Map文件,线上代码压缩使用chrome浏览器便于调式
如何利用Grunt生成对应的Source Map文件,线上代码压缩使用chrome浏览器便于调式 首先我们来说说为何要生成sourceMap文件呢?简单的说,sourceMap是为了压缩后的代码调式提 ...
- JavaScript中的箭头函数
1.定义 箭头函数相当于匿名函数,并且简化了函数定义.箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ ... }和return都省略掉了.还有一种可以包含多条语句,这时候就不能省略{ ... ...
- keepalived 做全端口映射
global_defs { lvs_id BACKUP } vrrp_sync_group VGM { group { VI_1 } } vrrp_inst ...
- (转)Centos7 修改硬件时间和系统时间
查看硬件时间 [root@localhost ~]# hwclock --show Tue 13 Jun 2017 02:11:12 AM CST -0.848845 seconds 1 2 可以看出 ...
- day06--元组、字典、集合与关系运算
今日内容: 1.元组 2.字典 3.集合与关系运算 元组: 用途:记录多个值,当多个值没有改的需求,此时用元组更适合. 定义方式:在()内用逗号分隔开多个任意类型的值. 变量名=tuple('') 切 ...