软件工程第二次作业
功能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