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小时 构建项目逻辑: ...
随机推荐
- October 25th, 2017 Week 43rd Wednesday
Perseverance is not a long race; it is many short races one after another. 坚持不是一个长跑,她是很多一个接一个的短跑. To ...
- struct与class区别联系(转)
传送门:struct与class区别联系 注意C中的struct和C++中的struct是不一样的,c中的struct比较原生,仅仅是将一些属性封装起来构成一个整体,没有OO的相关特性.而c++中的s ...
- Nescafe #29 NOIP模拟赛
Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...
- Android 打造属于自己的照片选择器
前言 在做第一个项目时照片选择器使用了开源的PhotoPicker 渐渐无法满足需求,就想着打造一款属于自己的照片选择器. 花了一周的时间完成了该项目,其实代码有一大半并非自己写的,在阅读PhotoP ...
- GDI+编程小结
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负 ...
- CentOS配置Hive
hive搭建共分为三种模式:1.embedded,2.local,3.remote server 在这里,主要是配置第3种模式:remote server模式,如下图所示: 我的环境共三台虚拟机:Ho ...
- Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决
解决办法:重写ScrollView,如下代码所示: public class MyScrollView extends ScrollView{ private GestureDetector mGes ...
- haproxy [WARNING] 312/111530 (17395) : config : 'option forwardfor' ignored for frontend 'harbor_login' as it requires HTTP mode.
1.经过调查, 2down voteaccepted x-forwarded-for is an HTTP header field, so has nothing to do with the tr ...
- MVC 拦截指定的action
有时,我们需要在特定的一些aciton中做校验.比如:验证是否登录.实现方式有两种: 一.编写一个公共的方法专门用于实现是否登录的验证,然后在每个需要进行验证的aciton的头部去调用该方法,根据方法 ...
- 解决EF使用context.Database.SqlQuery时NotMapped属性列为空null的问题(转载)
有时候我们要为EF中的Model加一个新属性,这个属性不是数据库中的字段,而是从其它表中关联出来的.EF中要标示一个列不是对应表中字段只需要加上NotMapped特性.要使用NotMapped,保证你 ...