功能1: 小文件输入。本功能实现的难点是输入的问题,如何读txt文件,但真正的问题是自己花了很多时间也没有实现词频的整齐对其。
if (args.Length == 2){ string path = "C:\\Users\\Administrator\\Desktop\\" + args[1]; string txt = my.ReadFile(path); my.myfunc1(txt);}
功能2: 支持命令行输入英文作品的文件名。这里我也实现的不好,感觉问题蛮多的,像输出格式,排序方法,还需要进一步修改调试
string pth = "C:\\Users\\Administrator\\Desktop\\" + args[0] + ".txt";string tx = my.ReadFile(pth);my.myfunc1(tx);break;
功能3:支持命令行输入存储有英文作品文件的目录名,批量统计。这个作业我还在寻找bug,现在最大的问题如图所示,还需慢慢编译。
case "folder": string text = ""; DirectoryInfo fold = new DirectoryInfo("C:\\Users\\Administrator\\Desktop\\folder"); foreach (FileInfo file in fold.GetFiles("*.txt")) { //Console.WriteLine(file.DirectoryName); text += my.ReadFile(file.DirectoryName); } my.myfunc1(text); break;
核心代码如下:
class WordF { public void myfunc1(string txt) { //定义一个字符数组 char[] c = { ' ', ',', '.', '?', '!', ':', ';', '\'', '\"' }; //分隔字符串后产生的字符串数组 string[] S = txt.Split(c); //建立哈希表 Hashtable ha = new Hashtable(); for (int i = 0; i < S.Length; i++) { //判断文本是否进入 if (ha.ContainsKey(S[i])) { ha[S[i]] = (int)ha[S[i]] + 1; } else { ha.Add(S[i], 1); } } int ans = 0; foreach (DictionaryEntry de in ha) { ans = ans + (int)de.Value; } Console.WriteLine("Total: " + ans); //遍历哈希表 //foreach (DictionaryEntry de in ha) //{ // //输出 // Console.WriteLine(de.Key + ":" + de.Value); //} string[] keys = new string[ha.Count]; double[] values = new double[ha.Count]; ha.Keys.CopyTo(keys, 0); ha.Values.CopyTo(values, 0); Array.Sort(values, keys); int len = 10; if (values.Length < 10) { len = values.Length; for (int i = len - 1; i >= 0; i--) { Console.WriteLine(keys[i] + ": " + values[i]); } } else { for (int i = len - 1; i >= 0; i--) { Console.WriteLine(keys[i] + ": " + values[i]); } } } public string ReadFile(string file) { string readLine; FileStream fs = new FileStream(file, FileMode.Open); StreamReader sr = new StreamReader(fs); readLine = sr.ReadToEnd(); sr.Close(); fs.Close(); return readLine; } }
本周PSP
代码及版本控制: