【开发动机】
又是一年的公务员考试,笔者一直在纠结要不要去再趟一次浑水,外一要上岸了呢。3月1日开始报名,6号是最后截止时间,我的态度就是先观望几天,到5、6号最后阶段视报名情况选一个竞争压力比较小的职位争取一下。因为考试办会每天定时发布一次截止到XX日XX时已报名的人数列表嘛,就是这个: http://gwybm.tjpnet.gov.cn/info/bmqk.htm 职位太多,找起来实在是太麻烦啦。于是打算写一个小工具,根据自己有意向的职位一键筛选出那个职位的报名缴费人数,这就一劳永逸了嘛~~(虽然也只是6日前有效。。)
【开发实现】
1、打开VS,建一个简单的winform界面。
包括一个按钮,一个richtextbox,一个webbrower控件
2、richtextbox中的内容可以从文本文件读取,也可以直接在控件中输入,格式上有要求:
例:208,人民法院塘沽审判区,行政综合二;
“208”是单位代码,“人民法院塘沽审判区”是报考部门,“行政综合二”是招考职位, 有了这三个元素就可以确定我要观望的那个职位啦! 哦,对了,这个职位信息在招考职位表的xls文档中有的,选好这个职位后,取出这三个元素来就可以了。
3、webbrower中是为了呈现筛选出来的职位信息,其实就是一个重写的html代码。
4、编写按钮的处理事件
源码如下:
private void button1_Click(object sender, EventArgs e)
{
WebClient client = new WebClient();
Stream myStream = client.OpenRead(@"http://gwybm.tjpnet.gov.cn/info/bmqk.htm"); //这是当日公布的职位报考情况列表
StreamReader sr=new StreamReader(myStream);
string strHtml = sr.ReadToEnd(); //取到全部源码
sr.Close();
//取页面头部 开始
int headend = strHtml.IndexOf("<tr class=\"public_form_td\">");
string strHead = strHtml.Substring(0, headend); //获取到源页面的头部代码,用于拼装整个页面
//取页面头部 结束
//取职位表 开始
int startIndex = 0;
int stopIndex = 0;
List<string> listStr = new List<string>(); //所有职位的<TR></TR>标记
for (int i = 0; i < 5000;i++ )
{
startIndex = strHtml.IndexOf("<tr class=\"public_form_td\">") +27;
stopIndex = strHtml.IndexOf("</tr>",startIndex) + 5;
if (startIndex == 26||stopIndex==4) //如果找不到字串了,说明已经都取完了,结束循环
{
i = 1000000;
continue;
}
string Item ="<tr class=\"public_form_td\">"+ strHtml.Substring(startIndex, stopIndex - startIndex);
listStr.Add(Item);
strHtml = strHtml.Substring(stopIndex);
}
//取职位表 结束
//处理自选的职位信息 开始
string StrMyFav = this.richTextBox1.Text;
string[] MyFav = StrMyFav.Split(';');
for (int i = 0; i < MyFav.Length; i++)
{
MyFav[i]=MyFav[i].Replace('\n',' ');
}
//处理自选的职位信息 结束
List<string> myfaver = new List<string>(); //保存最后筛选出的职位的<TR></TR>标记 集合
foreach (string singelFav in MyFav)
{
string[] keyword = singelFav.Split(',');
foreach (string singleJob in listStr)
{
int correctCount = 0;
for (int i = 0; i < keyword.Length; i++)
{
if (singleJob.Contains(keyword[i].Trim()))//就为一个空格弄了我一个多小时,哎
{
correctCount++;
}
}
if (correctCount == keyword.Length && keyword.Length != 1)//如果包含字串的数量符合自选职位的元素数量,说明这个职位就是我们要筛选的职位
{
myfaver.Add(singleJob);
}
}
}
//重新拼装要呈现的HTML 开始
StringBuilder MyListHtml = new StringBuilder();
MyListHtml.AppendLine(strHead);
foreach(string line in myfaver)
{
MyListHtml.AppendLine(line);
}
MyListHtml.AppendLine("</table></td>");
MyListHtml.AppendLine("</tr>");
MyListHtml.AppendLine("</table></td>");
MyListHtml.AppendLine("</tr>");
MyListHtml.AppendLine("</table>");
MyListHtml.AppendLine("</body>");
MyListHtml.AppendLine("</html>");
//重新拼装要呈现的HTML 结束
webBrowser1.DocumentText = MyListHtml.ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(Application.StartupPath + @"\myFav.txt");
this.richTextBox1.Text = sr.ReadToEnd();
sr.Close();
}
【工具演示】
【总结】
这个工具主要值得提的就是对于字符串的处理,特别是在调试过程中忽略了一个空格,导致了1个小时的浪费。。。
出处:http://www.cnblogs.com/ytaozhao 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。