软件工程第二次作业

功能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

代码及版本控制: https://coding.net/u/liuyz349/p/word_count/git

posted @ 2017-09-19 04:01  刘耀泽  阅读(162)  评论(0编辑  收藏  举报