一个小程序,看不太懂,帮忙。

ddsxd19 2009-02-15 05:05:45
请写一个程序找出附件中文件重复的行
输出:
输出一个文本文件,给出哪些行是重复的,第一次出现的行号,格式如下
行号 此行的文本内容
并给出此程序的运行时间


以下是代码,可是有些知识点不是太熟悉,看的头很大没看明白代码是怎么实现要求的。
请明白的帮我给每行代码加上注释,谢谢!


static void Main(string[] args)
{
TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks); //TimeSpan 我只知道是根据输入日期计算两个指定日期之间的时间间隔的意思,实际没用过。DateTime.Now是现在的时间,而DateTime.Now.Ticks是干吗的?网上查到的意思是“表示自 0001 年 1 月 1 日午夜 12:00:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。一个以0.1纳秒为单位的时间戳。”半懂不懂的...所以这第一句代码就没明白是怎么会事。
StreamReader sr = new StreamReader(@"D:\文本.txt", System.Text.Encoding.Default); //StreamReader是什么什么读取流吧,这句的意思就是读取指定路径的文本文档吧?
String strline="";
int number=1
StringBuilder sb=new StringBuilder();

Hashtable myHT=new Hashtable ();//定义哈希表,具体意义是?

while((strline=sr.ReadLine())!=null)//判断文本是不是空的?
{
if (myHT.ContainsKey(strline))//myHT.ContainsKey()这个方法是做什么的?
{
sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//往StringBuilder里加东西吧?
}
else
{
myHT.Add(strline, number);//一行一行往哈希表里加?哈希表是用来放文档的?
}
number++;
}
//看到这基本就昏了,到不是全看不懂,只是放一起就昏了。后面的代码也尽量加上注释,谢谢了!
sr.Close();
StreamWriter wr = new StreamWriter(@"D:\1.txt");
wr.Write(sb+"");
wr.Close();

TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks); //?
string spanTotalSeconds = ts2.Subtract(ts1).Duration().TotalSeconds.ToString(); //?
Console.WriteLine(spanTotalSeconds);
Console.ReadKey();
}


...全文
187 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddsxd19 2009-02-16
  • 打赏
  • 举报
回复
非常非常感谢大家!我会努力的!
结贴!
hangang7403 2009-02-15
  • 打赏
  • 举报
回复
up
uncleson88 2009-02-15
  • 打赏
  • 举报
回复
哎~~~养成看MSDN的习惯吧~~~
yrh1234 2009-02-15
  • 打赏
  • 举报
回复
是的
程序yy 2009-02-15
  • 打赏
  • 举报
回复
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks); //?
string spanTotalSeconds = ts2.Subtract(ts1).Duration().TotalSeconds.ToString(); //?
Console.WriteLine(spanTotalSeconds);
Console.ReadKey();
这部分代码的作用是不是计算整个程序的运行时间啊?
wuyq11 2009-02-15
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(@"D:\文本.txt", System.Text.Encoding.Default); //StreamReader是什么什么读取流吧,这句的意思就是读取指定路径的文本文档吧?
String strline="";
int number=1
StringBuilder sb=new StringBuilder();

Hashtable myHT=new Hashtable ();//定义哈希表,判断重复行

while((strline=sr.ReadLine())!=null)//判断文本是否为空
{
if (myHT.ContainsKey(strline))//myHT.ContainsKey()判断数据在hashtable是否存在
{
sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//添加数据到StringBuilder
}
else
{
myHT.Add(strline, number);//哈希表不存在添加到哈希表
}
number++;//行号
}
sr.Close();//结束
cppfaq 2009-02-15
  • 打赏
  • 举报
回复
number:行号
Hashtable: <字符串,初次出现的行号>
StringBuilder:输出结果

遍历文件,按行读出。
如果hashtable中包含该行,说明该行曾经出现过,因此输出初次出现的行号以及该行内容
否则,该行内容为首次出现,保存<该行内容,行号>到Hashtable
飞天鹰 2009-02-15
  • 打赏
  • 举报
回复
帮顶一下
king19840811 2009-02-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
定义哈希表的key 是一行字符串,value是行号,

while((strline=sr.ReadLine())!=null)//判断当前读的一行字符串是不是为空,为空就不要判断后面 {
if (myHT.ContainsKey(strline))//判断当前这一行内容是不是已经存到哈希表了
{
sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//如果这一行内容已经添加过,则重复,把重复的内容放…
[/Quote]

解释得很详细
oyljerry 2009-02-15
  • 打赏
  • 举报
回复
定义哈希表的key 是一行字符串,value是行号,

while((strline=sr.ReadLine())!=null)//判断当前读的一行字符串是不是为空,为空就不要判断后面 {
if (myHT.ContainsKey(strline))//判断当前这一行内容是不是已经存到哈希表了
{
sb.Append(myHT[strline].ToString() + " " + strline + "\r\n");//如果这一行内容已经添加过,则重复,把重复的内容放到sb中
}
else
{
myHT.Add(strline, number);//存入行的内容以及它的行号
}
number++;
}
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧