博文

[置顶] 别了,朋友们!(2007-1-23 10:18:00)

 

一年前,我来到了这里.

一年后,我将悄悄离去.

这是我第一次见到 elva 时说过的话. 如今这一时刻到来了. PFAN注定成为我生命历程中的一座驿站.

一年来, 我认识了很多不错的朋友,大家有着共同的兴趣和志向,讨论着关心的话题, 或共同修改一个不成熟的算法,然后拿出比较. 同悲同喜, 扯淡,揶揄. 从那一刻起, 这里便成了我的牵挂. 学了新技术和大家一起分享心得和体会, 互相发问, 祝福, 其乐融融.

 

标哥, 风飞, 创意 ,harm, j**  , 还有那个叫我大叔的小姑娘…….  太健忘,能记起的也就这些了. 请原谅我的无情, 只是为了履行诺言!

标哥: 考研已经过了, 知道你对自己的表现不是很满意, 可这毕竟是个结果, 只要努力了, 就该拿的起,放的下. 我相信你会成功的,自信点啊, 起码你是哥几个唯一有老婆的人啊. 呵呵, 下次和 祥哥喝可乐的时候可别忘了我们这帮兄弟哦.

风飞: 本想你卖了自己, 该请我们戳一顿了, 可后来又听说你运气不佳.也就算了吧. 没等着我出手, 你就自己爆料了, 有自知之明啊!(呵呵,开个玩笑). 进公司还好吧, 其实你有很多和我相似的地方, 就像我俩的生日一样.我最羡慕的是你有个特疼你的妹妹, 小伙子要珍惜啊. 我俩生日那天, 真的很想和你喝几杯啊!!! 我们干着同样的事情, 或许以后真的能见面, 还记得我在深圳的时候, 你和我说的话吗?

Love-me: 开始感觉你很怪, 又很乖, 风飞怎么会有你这个小妹妹, 经常乘着老爸不在的时候和我们一起灌水. 真不知被你老爸发现后会有什么反应? 据说因为考了全班第二名就被家人斥责, 大家都能感受到你的家教之严厉. 其实最让我感动的是你对哥哥的关心. 看你们这对无话不谈的兄妹. 让人感触良深.  好好珍惜吧, 或许几十年也抹不去这么美好的回忆.

创意: 第一次遇到你,就感觉是个有想法,不错的个人. 没有深交,加油吧,BOY, 你是最棒的.

 

………..

朋友们, 请再次原谅我的离别吧!

May you lucky!

 

 


阅读全文(3054) | 评论:4 | 复制链接

汇编通讯录系统[代码](2007-1-4 11:14:00)

 

 

            汇编课程设计报告

 

 

 

 

题目: 通讯录系统

 

 

 

 

 

 

姓名: 何xx

   学号: 2004xx

      班级:计科04-x

       指导老师: 郑xx

 

 

 

 

1.1   设计要求.

题目要求设计一个通讯录管理系统.需要具有以下功能和模块.

(1) 输入模块: 输入新的通讯条目,包括:姓名,性别,电话,E-mail,通讯地址,邮编,QQ

(2) 删除模块: 删除功能.

(3) 查询模块: 查询,输入姓名可以查询该人其他信息.

(4) 修改模块: 修改某一条记录.

(5) 存储模块(附加功能,可以不完成): 能够将输入的信息存储到硬盘文件;并能读入存储在该文件中的信息.

1.2   环境.

软件: windows xp, masm 6.x, notepad

硬件: PC

1.3   分析,设计思想.

看到题目,感觉就像是个简单的数据库系统.支持数据的增///改操作.具有应用价值.在数据库系统中,数据是以数据库文件的形式存在.通过访问/操作数据库中的表或表中的字段,获取我们想要的信息.

本系统可以归结为4个功能: select, insert, update,delete.

在这里不可能建立一张数据表来维护这种关系型数据.必须要借助汇编中的结构类型.定义一个结构数组,用来维护数据条目及信息的处理.

如图: 修改和删除操作都要依赖查询功能.

故把整个程序分为4个模块是比较明智的.

1.4   模块说明

由于变量较多,故没有采用多模块设计方案.

几个功能分别在6个子过程中完成.

(1)    Insert : 添加新的数据项. 自动将条目总数加一.

(2)    Select : 查询信息,查询条件为姓名. 对结构数组无影响.

(3)    Update: 修改数据信息, 查询条件为姓名,修改查询结果的值,修改文件.

(4)    Delete : 删除数据信息, 查询条件为姓名,删除查询结果值,具体做法是: 不停的将后面的一条信息,前移,就达到删除的效果.

(5)    Load : 加载文件到内存,涉及文件读//打开操作.

(6)    Save : 保存缓冲区数据至文件.

1.5   流程详细

1.6   主要代码

;=================================

;                     何xx          

;              完成日期:  11-13  /2007

;              汇编课程设计

;              第二题:  通讯录设计

;=================================

(1)    宏定义

;清空当前item(输入缓冲区)

setitem macro a,b

;清空关键字

clearkey macro a

(2) 数据段

dseg segment

    ;文件路径

   filename db 'G:\programs\asm\design\items.txt',0

   ;错误提示: 没有找到文件或无法打开

   errshow db 0ah,0dh,'can not open or find this file! ','$'

    ;选择菜单

   menu db 0ah,0dh,'pleate enter your choice!',0ah,0dh       

        db '1: Insert',0ah,0dh

        db '2: Select/Search',0ah,0dh

        db '3: Update',0ah,0dh

        db '4: Delete',0ah,0dh

        db '5: Save',0ah,0dh

        db '6: Exit',0ah,0dh

        db '$'

    ;命令选择

   command db 0

   ;提示输入姓名

   namelabel db 0ah,0dh,'name:$'

   ;提示输入性别(F/M)

   genderlabel db 0ah,0dh,'gender:$'

   ;提示输入电话

   phonelabel db 0ah,0dh,'phone:$'

   ;提示输入E-MAIL

   maillabel db 0ah,0dh,'email:$'

   ;提示输入通讯地址

   addresslabel db 0ah,0dh,'address:$'

   ;提示输入邮编

   postalcodelabel db 0ah,0dh,'postalcode:$'

   ;提示输入QQ

   qqlabel db 0ah,0dh,'qq:$'

   clr db 0ah,0dh,'$'

   ;添加成功提示

   inserted db 0ah,0dh,'new item has been added successfully!',0ah,0dh,'$'

   ;编辑成功提示

   changed db 0ah,0dh,'you have changed this item successfully!',0ah,0dh,'$'

   ;删除成功提示

   deleted db 0ah,0dh,'delete successfully!',0ah,0dh,'$'

   ;保存成功提示

   saved db 0ah,0dh,'save successfully!',0ah,0dh,'$'

   ;查询失败

   selected db 0ah,0dh,'nothing to match!',0ah,0dh,'$'

   ;显示数据条数

   numshow db 0ah,0dh,'the count of items:$'

   ;=============================================================

   ;定义结构体

   item struct

      pid db 0

      pname db 10,?,10 dup('$')

      pgender db 10,?,10 dup('$')

      ptel db 10,?,10 dup('$')

      pemail db 10,?,10 dup('$')

      paddress db 10,?,10 dup('$')

      ppostalcode db 10,?,10 dup('$')

      pqq db 10,?,10 dup('$')

      pnum db 0

   item ends 

   ;定义结构体结束

   ;==============================================================

   olditem item {}

   ;输入缓冲区

   newitem item {}

   ;结构数组长度

   len equ type item

   ;结构总数,文件中此变量位于最后一位

   num db 0

   ;定义结构数组

   items item 100 dup({})

   ;inititems item 100 dup({})

   ;,,改条件/通过姓名

   key db 10,?,10 dup('$')

   oldkey db 10,?,10 dup('$')

   ;flag,作为查找结果标志,0表示查找失败.

   flag db 0

   ;自定义指针

   pointer db 0

   ;标号地址表

   addrtbl dw insertbegin,selectbegin,updatebegin,deletebegin,savebegin,done

dseg ends


(3) 标号定义:

Insertbegin                               

Selectbegin                                        

Updatebegin

Deletebegin

Savebegin

Done                                                              

(4) 子过程 (由于篇幅限制,不给出代码)

;添加记录子过程

insert proc

;查找子过程

select proc

;编辑子过程

update proc

;删除子过程

delete proc

;保存至文件

save proc

;加载文件内容到缓冲区: 结构数组,其中最后一位为数据条数

load proc

;打印子过程

print proc

    

1.7  小结.        

    关于程序: 实现题目要求的功能(包括文件的存储),初步具备简单数据库系统的功能,虽然没有实用性, 但对整体机制的理解很有帮助.是一次不错的练手机会.

    体会: 通过本次课程设计.进一步掌握了ASM程序设计方法,由于考试在即,时间较紧张,未做界面的优化,16位下实现,总体来说题目较简单,功能区分明显,结果较清晰,写程序的时候未遇到太多困难, BUG倒很多,一口气写完,第一次调试居然198ERROR, 不段的调试程序和优化流程,花费了不少心思,频繁的参考课本和相关资料是不可避免的,也深刻的感受到了,汇编程序设计的繁琐和开发效率的低下,汇编好几行语句在高级语言里面只需要一条就可以完成,事物总有两面性,存在即具其合理性,ASM的优越的性能(时间和空间),高级是望尘莫及的,ASM让我们更加注重底层的东西,这也是一个优秀软件工程师必备的素质,处理繁琐的细节问题往往暂用了相当一部分的开发时间,相信课程设计的目的已经达到.

1.8 参考书籍或资料.

                                       

         (1) 教材

          (2) http://community.csdn.net/

          (3) BIOS_DOS.DOC(来自FTP)


阅读全文(4446) | 评论:3 | 复制链接

汇编冒泡排序算法(2006-12-11 14:11:00)

dseg segment

   Array dw 10,9,8,7,6,5,4 dup(8)
   Len = ($-Array)/2
   addr dw ?
dseg ends

cseg segment
   assume cs:cseg,ds:dseg
 
 start:
   mov ax,dseg
   mov ds,ax
  
   mov cx,Len-1
   mov di,0
   mov si,Len
 begin:
   dec si
   mov di,0
   again:
      mov bx,di
      shl bx,1
      mov ax,word ptr Array[bx]
      inc di
      cmp ax,Array[bx+2]
      jna next
      xchg ax,Array[bx+2]
      mov Array[bx],ax
     next:
      cmp di,si
      jb again
     
   loop begin
    
     mov ah,4ch
     int 21h
 cseg ends
    end start  
  


阅读全文(5515) | 评论:8 | 复制链接

容易忘事,不得不做个计划了(2006-12-4 21:57:00)

说实话最近有点小忙.

上周显示器抱修, 本人小憩了几天, 每天晚上10点前睡觉, 疯狂的补充了些睡眠.

梳理一下需要做的一些事情吧,有些乱了.

现在 15,今天124.

1.       CET-6 (12月底) :已经第三次了,从来没有认真准备过,宿舍一个哥们乘我不在偷偷的帮我报了,18,没办法啊.

2.       ANDES: 科技厅的项目的确不好做, 老大和那些”BOSS”们打交道,外行就是外行,需求复杂了,不能一次搞定,可怜了我们这些小鬼们.再来呗, ! 只当是练手.

3.       另外一个: 实验室并行的一个项目,也是省科技厅的,那些大佬们真够牛比,干什么都一口闷, 毫不给喘息的机会, B/S的按说很爽, 界面分配给我们俩个傻蛋,实话说,并不在行,也不喜欢,只能硬着头皮搞了.

4.       公共选修(2): 都在这周. 其实很无聊的课,只上过两次.好在老师够厚道,开卷,另加考题,庆幸半小时前从一位热心人那里搞到题目.

5.       ASM: 下周考试, 很多同学的课程设计都搞定了,虽然DEADLINE19,但我仍然坚持在下周搞定,原因很简单,边复习准备考试边做.

6.       小项目: 之所以叫小项目,是受朋友所托,没有DEADLINE,一个商场MIS系统, 需求不多,要求实现的功能也很简单,一两周的时间差不多是够了, 关键是 条形码扫描数据格式识别与转换, 这对我来说是个陌生的东西, 承诺的 薪水”,  我也没过多关心, 不指望那些发财.

7.       专业选修: 比同学选的都多,三下 再选一门, 除了大四的几门必修课和毕业设计,基本可以毕业了. 话说,当你满负的时候,再给你一个石块感觉就像是座大山.

8.       联系: 以前火车上认识的一个女孩, 上个月给我发了一份邮件, 留个电话, 要我联系她,

一直太忙, 也没那个心情, 这事总不能拖到明年吧. 老同学都说我回短信的速度太慢,MM骂我一条短信 好几天才有反应, 大一 一周给家里一个电话, 大二 半个月, 大三,我记得上上次 貌似是刚开学的时候,有时候真服了我自己.

9.       自修课程: 信息检索, 数据仓库, 有时也挺烦的.

………………….

 

怎么办啊.老爸昨天打来电话,说看新闻北大有跳楼的,问我们学校有没有,我说有,去年有两个,老爸让我保重,貌似这事和我没关系啊!!!!

很有必要计划一下,尤其是最近两周.

1.        早起: 6:30-8:00单词, 阅读(英语新闻),国内外新闻.

2.        上课时间如果没课,自习,准备考试,外加复习线性代数(急需使用).

3.        正常晚自习需上(考试 喝酒除外).

4.        中午: 12:00-14:00 程序, 项目.

5.        晚上: 21:00-23:30 程序, 项目.

6.        周三下午: 开会.

7.        周末: 游戏, 课程设计.

8.        周日下午: 打球, 洗澡.

…………….

 

努力吧, 坚持走过这个月.


阅读全文(2635) | 评论:0 | 复制链接

WinTimer 1.0(2006-11-25 14:24:00)

WinTimer

Author: baker 

Time: 25/11-30/11

                                         Version: 1.0

平台:

   Windows xp.

   Visual Studio 2005  

C#.NET/C++.NET

   .Net Framework 2.0

需求:

   至少能计算一个月开机时长.

   生成清单.

   定时关机.

   日均时长.

几种方案:

 (1).使用 系统事件日志.

由于无法判断是否为正常关机,需要定时刷新关机项.

需要开机自启动.

 (2). 自定义开机,关机日志文件.

   可以采用 LOG,TXT,XML,涉及字符串,XML等相关处理.

   需要开机自启动.

   定期刷新最后一个关机项.

计算:

   Start[n]为开机时间集合数组.

   End[n]为关机时间集合数组.

   Sum 为总时间.

  两种计算公式

 

 

MSDN(来自VS2005 )

   演练:浏览事件日志、事件源和项

   EventLog 组件

   EventLog

   注册表

Class:

   EventLog

   Registry

   Timer

Control:

   EventLog

   Timer

问题:

  (1). 注册表中run , runonce ,runex三个启动项的区别.

    Run子项中定义了每次系统启动时都需要运行的程序,值项类型是字符串值,值项的名称是该运行程序的说明,值项的值是程序的名称;RunOnce子项中定义了只运行一次的程序,在该项下的值项中定义的程序运行起来后,该项下的值项就会被删除掉,这通常用于程序的安装过程;RunExRunOnceEx的作用和RunRunOnce是一样的,是RunRunOnce的扩充形式。

  (2).多线程问题.

System.Timers.Timer可以用于多线程, System.Windows.Forms.Timer用于UI而且不能用于多线程.

设计尽量使用前者.

Baidu/google:

   C++(c#)读写注册表.

   事件日志读写方法.

   Xml

…………

 

一天写程序,一天部署.

主程序界面.

10秒刷新一次记录.

 

 

总结: 通过此次练手,熟悉了Windows后台服务程序开发,系统事件日志构成和使用以及相应接口..NET程序的部署.


阅读全文(3095) | 评论:2 | 复制链接

坐死人不偿命的椅子.(2006-10-30 10:48:00)

昨天晚上,我玩的正爽,一时兴起,小激动了一下,这一激动倒好.

扑通摔倒了,头差点磕到桌角.

等我反应过来后,才发现自己坐在地上,貌似椅子出了问题,赶紧起来,只见两只椅腿横在地上.动静很大,隔壁的哥们都跑过来凑热闹.

想想原因,我太重了吗? 非也,还不到60公斤呢!  难道这椅子还有属豆腐渣的?

只有两条腿的椅子真是玩死人不偿命啊!


阅读全文(2927) | 评论:34 | 复制链接

数据仓库概论(2006-10-26 22:38:00)

Data warehousing is a concept. It is not a product that you can buy off the shelf. It is a set of hardware and software components that can be used to better analyze the massive amounts of data that companies are accumulating to make better business decisions. The data you use to operate your business represents a wealth of knowledge that you may not be fully tapping into. It is an asset that is probably not being used to its fullest potential. Data warehousing can help you take advantage of the knowledge base you've created over time--your data!

          <TO Be Continued>

数据仓库是一个概念,不是你在货价上能买到的东西,它是软件和硬件组成的,并且能够分析大量商业历史数据. 为了更好的做出商业决策, 你在无意识当中使用的数据,将是一大比财富,无非是没有发挥出它自身的潜质,通过数据仓库的概念,你可以利用现在的知识和数据,创造出巨大的财富数据.

    <未完待续>

注: 本意只是附上了一个概念,作为我学习"数据仓库"的开始,看到几位兄弟却有点认真看待 ,随便翻译了一下,基本按照自己的理解,着实有点生硬.着实有点装B之嫌,见谅!


阅读全文(3127) | 评论:4 | 复制链接

【开发周报】帮菜鸟做JAVA文档搜索(2006-10-4 9:26:00)

隔壁宿舍菜鸟学JAVA遇到了一个问题,在网上下载了一个JAVA帮助文档(也就和MSDN差不多的东西),十几万条信息,愣是按照首字母的顺序,排列成了27个静态网页,没有查询功能,该菜鸟每次写程序时都为查询烧透了脑筋。于是找到了我,求我给做个搜索功能。要回家了,没多少时间,所以只建了个索引表。

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Collections;
using System.Data.SqlClient;

public class search
{

   public static string ClientPage;
   public static string infor;
   public static string keys;
   public static HttpWebRequest HttpWReq;
   public static HttpWebResponse HttpWRes;
   public static MatchCollection m;
   public static MatchCollection m2;

   public static Encoding GetEncoding(HttpWebResponse response)
    {
        string name = response.ContentEncoding;
        Encoding code = Encoding.Default;
        if (name == "")
        {
            string contentType = response.ContentType;
            if (contentType.ToLower().IndexOf("charset") != -1)
            {
                name = contentType.Substring(contentType.ToLower().IndexOf("charset=") + "charset=".Length);
            }
        }

        if (name != "")
        {
            try
            {
                code = Encoding.GetEncoding(name);
            }
            catch { }
        }
        return code;
    }


    public static string TextContent(HttpWebResponse response)
    {
        string buffer = "", line;

        Stream stream = response.GetResponseStream();
        StreamReader reader = new StreamReader(stream, GetEncoding(response));

        //buffer = "<base href=http://localhost:1080 />";
        while ((line = reader.ReadLine()) != null)
        {

            buffer += line + "\r\n";
        }
        stream.Close();

        return buffer;
    }

    public static void insert_xml(string k, string t)
    {

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("G://webroot/dotnet/api/index-files/java.xml");
        XmlNode node = xmlDoc.SelectSingleNode("elements");

        XmlElement xe = xmlDoc.CreateElement("element");
        XmlElement xe1 = xmlDoc.CreateElement("key");
        XmlElement xe2 = xmlDoc.CreateElement("detail");

 

        xe1.InnerText = k;
        xe.AppendChild(xe1);
        xe2.InnerText = t;
        xe.AppendChild(xe2);
        node.AppendChild(xe);

        xmlDoc.Save("G://webroot/dotnet/api/index-files/java.xml");
    }
    /// <summary>
    /// /////
    /// </summary>


    public static void seek(string url)
    {
        /*
         HttpWReq = (HttpWebRequest)WebRequest.Create(url);
         HttpWReq.Timeout = 20000;
         HttpWRes = (HttpWebResponse)HttpWReq.GetResponse();
          */
        ClientPage = new StreamReader((System.IO.Stream)File.OpenRead(url), System.Text.Encoding.GetEncoding("gb2312")).ReadToEnd();
        string dl = @"\<DT\>.*DD[^。;]*(;|。)";
        //show.Text="";
        m = Regex.Matches(ClientPage, dl, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
        //show.Text += m.Count.ToString()+"<br>";

        for (int i = 0; i < m.Count; i++)
        {
            m2 = Regex.Matches(m[i].Value, @"\<B\>[^\<]*\</B\>", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
            if (m2.Count > 0) keys = Regex.Replace(m2[0].Value, "<[^>]*>", "");
            else keys = "No Keys!";
            //show.Text += "<font color=red>"+(i+1).ToString()+"</font> ."+"<font color=green>"+keys+"</font>" + m[i].Value + "</DD></DT><br>";
            insert_xml(keys, m[i].Value + "</DD></DT>");
        }

    }
    public static void Main()
    {
        for (int i = 1; i <= 27; i++)
        {
            Console.WriteLine("seeking page: " + i.ToString() + ".......");

            seek("G://webroot/dotnet/api/index-files/index-" + i.ToString() + ".html");
        }
    }
}

索引表:


阅读全文(3302) | 评论:3 | 复制链接

【开发周报】Spider(一)(2006-9-27 14:05:00)

文字

      做出了"网络蜘蛛"的初步模型,追溯超链功能.

     采用BFS算法,仍是单线程,即便如此CPU占用率仍为 90%左右,不知 "肉鸡" 可否承受!

      在"URL正确性","相对链接转换","父路径"等判断性上尚需改进,以及"资源容错率",关键字处理,蜘蛛性能都将成为考虑范围.


阅读全文(3695) | 评论:4 | 复制链接

D版MP3搜索引擎及其代码(2006-9-22 22:37:00)

 

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Text;
//using System.ArgumentOutOfRangeException;

using System.Data;
using System.Data.SqlClient;

public static class RegexTest
{
    public static  string req;
    public static string infor;
    public static string keys;
    public static  string reg2;
    public static  string reg3;
    public static  string reg4;
    public static  string reg1;
    public static  string reg5;
    public static string nums;
    public static  string mainurl;
    public static  string mainstyle;
    public static  string mainsinger;
    public static  string mainsong;
    public static string mainspecial;
    public static  string mainsize;
    public static  int id = 0;
    public static int k;
    //public static static  MatchCollection m;  
    public static MatchCollection m1;
    public static  MatchCollection m2;
    public static MatchCollection m3;
    public static MatchCollection m4;
    public static MatchCollection m5;
    public static MatchCollection mnum;
    public static HttpWebResponse HttpWResp;
    public static HttpWebRequest HttpWReq;
    public static  SqlConnection Conn;
    //   public static SqlCommand comm;
    // public static string sql;
    /*
   void Page_Load(Object sender, EventArgs e)
    {


        Conn = new SqlConnection("server=localhost;database=index;uid=baker;pwd=baker");
        Conn.Open();
        keys = Request["url"];
        if (keys != "") sick();
        // Conn.Open();
        // conne.Text = Conn.State.ToString();

    }


    void On_click(Object sender, EventArgs e)
    {
        if (url.Text != "")
        {
            keys = url.Text;
            sick();
        }
    }
*/

    public static  void sick(string keys)
    {

        try
        {
            k = 1;
            for (int j = 0; j < k; j++)
            {

                req = "http://search.tom.com/searchmp3.php?singer=" + HttpUtility.UrlEncode(keys, Encoding.Default) + "&items=" + (j + 1).ToString();
                HttpWReq = (HttpWebRequest)WebRequest.Create(req);

                HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
                //   Response.Write(HttpWResP.StatusCode);
                infor = TextContent(HttpWResp);
                // reg = @"('(http|https|ftp|rtsp|mms|\d{1}):(\/\/|\\|\\\\){1}(([A-Za-z0-9_-]|['])+[.]){1,}([a-z0-9]{1,3})([^   \f\n\r\t\v\""\'\>]*\/)(([^   \f\n\r\t\v\""\'\>~])+[.]{1}(((m|M)(p|P)3)|((w|W)(M|m)(v|V))|((w|W)(M|m)(A|a))|((M|m)(p|P)(G|g))|((A|a)(S|s)(F|f))|((W|w)(A|a)(V|v))|((r|R)(M|m))|((m|M)(I|i)(D|d))|((A|a)(V|v)(I|i))|(M|m)(O|o)(V|v)|(S|s)(W|w)(F|f)|((R|r)(A|a)(M|m))|((G|g)(S|s))|(mpga)|((f|F)lash)))')";
                // reg = @"('(http|https|ftp|rtsp|mms|\d{1}):(\/\/|\\|\\\\){1}(([A-Za-z0-9_-])+[.]){1,}(gov|mobi|name|travel|hk|sh|ac|free|ca|io|biz|info|fm|com|ws|edu|tw|no|net|jp|cz|com|cn|org|cc|tv|[0-9]{1,3})([^   \f\n\r\t\v\""\'\>]*\/)(([^   \f\n\r\t\v\""\'\>])+[.]{1}(((m|M)p3)|((w|W)mv)|((w|W)ma)|((M|m)pg)|((A|a)sf)|((W|w)av)|((r|R)m)|(M|m)ov|(S|s)wf|((f|F)lash)))')";
                //Regex re=new Regex(reg);
                reg1 = @"(.a\shref='(http|https|ftp|rtsp|mms|\d{1}):(\/\/|\\|\\\\){1}(([A-Za-z0-9_-])+[.]){1,}([a-z0-9]{1,3})([^   \f\n\r\t\v\""\'\>]*\/)(([^   \f\n\r\t\v\""\>~])+[\.]{1}(((m|M)(p|P)3)|((w|W)(M|m)(v|V))|((w|W)(M|m)(A|a))|((M|m)(p|P)(G|g))|((A|a)(S|s)(F|f))|((W|w)(A|a)(V|v))|((r|R)(M|m))|((m|M)(I|i)(D|d))|((A|a)(V|v)(I|i))|(M|m)(O|o)(V|v)|(S|s)(W|w)(F|f)|((R|r)(A|a)(M|m))|(gs)|(asx)|(flv)|(mpga)|((f|F)lash)))')\s+target=_blank.+[^(\n)/]";
                reg2 = @"(?<=nbsp;)[0-9\.]{1,5}(M|K)";
                reg3 = @"(?<=searchmp3.php.singer=)\w*([^\""]*)*";
                reg4 = @"(?<=searchmp3.php.special=)\w*([^\""]*)*";
                nums = @"(?<=找到)[^首]*";

                // reg5 = @"(?<=.br.{2})(((m|M)(p|P)3)|((w|W)(M|m)(v|V))|((w|W)(M|m)(A|a))|((M|m)(p|P)(G|g))|((A|a)(S|s)(F|f))|((W|w)(A|a)(V|v))|((r|R)(M|m))|((m|M)(I|i)(D|d))|((A|a)(V|v)(I|i))|(M|m)(O|o)(V|v)|(S|s)(W|w)(F|f)|((R|r)(A|a)(M|m))|((G|g)(S|s))|((f|F)lash)))[^\s]";
                //ObjReg.Pattern = "<[^>]+>|</[^>]+>";
                // m = Regex.Matches(infor, reg,  RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                m2 = Regex.Matches(infor, reg2, RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                m3 = Regex.Matches(infor, reg3, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                m4 = Regex.Matches(infor, reg4, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                m1 = Regex.Matches(infor, reg1, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                mnum = Regex.Matches(infor, nums, RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
                //num.Text = mnum[0].Value + "---" + m1.Count.ToString() + "(" + m2.Count.ToString() + ")" + "(" + m3.Count.ToString() + ")" + "(" + m4.Count.ToString() + ")";//+ "(" + m5.Count.ToString() + ")"
                string sum = Regex.Replace(mnum[0].Value, "<[^>]*>", "");
                k=(int.Parse(sum))/20;
                if (k > 20) k = 20;
                int sumber = m1.Count;
                for (int ii = 0; ii < sumber; ii = ii + 2)
                {
                    string mainurl1 = Regex.Replace(m1[ii].Value, @".a\shref=\'", "");
                    mainurl = Regex.Replace(mainurl1, @"\'\s+target=_blank.+[^(\n)/]", "");
                    mainstyle = Regex.Replace(mainurl, @"[^\.]*\.", "");
                    mainsong = Regex.Replace(m1[ii].Value, "<[^>]*>", "");
                    mainsinger = m3[ii / 2].Value;
                    mainspecial = m4[ii / 2].Value;
                    mainsize = m2[ii / 2].Value;

                    /*
                         html.Text += "<tr align=left><td>" + ((i + 2) / 2).ToString() + "</td>";
                         html.Text += "<td ><a href=" + mainurl+ ">" +  mainsong+ "</a></td>";
                        // html.Text += "<td Width=40%>"+((i + 2) / 2).ToString() + ":<a color=green href=" + m[i].Value + "> " + m[i].Value + "</a></td>";
                         html.Text += "<td align=left>" +mainsize  + "</td>";
                         html.Text += "<td align=left ><a href=search.aspx?singer=" +mainsinger+ ">"+mainsinger+"</a></td>";
                         html.Text += "<td align=left ><a href=search.aspx?special=" + mainspecial +">"+ mainspecial + "</a></td>";
                         html.Text += "<td align=left>" + mainstyle + "</td>";
                         html.Text += "</tr>";
                   */
                    datainsert(mainurl, mainsong, mainsinger, mainspecial, mainsize, mainstyle);
                    //  Console.WriteLine((i/2).ToString());
                }

                // html.Text += "</table>";
                id++;
                Console.WriteLine(id.ToString() + ":  " + keys + " is added successfully!  counts= " + (sumber / 2).ToString());
                HttpWResp.Close();
            }
        }

        catch (Exception ee)
        {
            //Console.Response.WriteLine( "no connect!");    

        }
        
}
   

    public static  Encoding GetEncoding(HttpWebResponse response)
    {
        string name = response.ContentEncoding;
        Encoding code = Encoding.Default;
        if (name == "")
        {
            string contentType = response.ContentType;
            if (contentType.ToLower().IndexOf("charset") != -1)
            {
                name = contentType.Substring(contentType.ToLower().IndexOf("charset=") + "charset=".Length);
            }
        }

        if (name != "")
        {
            try
            {
                code = Encoding.GetEncoding(name);
            }
            catch { }
        }
        return code;
    }


    public static  string TextContent(HttpWebResponse response)
    {
        string buffer = "", line;

        Stream stream = response.GetResponseStream();
        StreamReader reader = new StreamReader(stream, GetEncoding(response));

        //buffer = "<base href=http://localhost:1080 />";
        while ((line = reader.ReadLine()) != null)
        {

            buffer += line + "\r\n";
        }
        stream.Close();

        return buffer;
    }


    public static void datainsert(string url1, string song1, string singer1, string special1, string sizes, string style)
    {

        string url = Regex.Replace(url1,@"[\""\'|]","");
        string song=Regex.Replace(song1,@"[\""\'|]","");
        string singer=Regex.Replace(singer1,@"[\""\'|]","");
        string special=Regex.Replace(special1,@"[\""\'|]","");
        String sql = "insert  into  infor(url,song,singer,special,sizes,type) values('"+url +"','"+ song+"','"+ singer+" ','"+ special+"','"+ sizes +"',' "+ style+" ')";
        SqlCommand comm = new SqlCommand(sql, Conn);
        comm.ExecuteNonQuery();

    }

   public static void  Main()
    {
        Conn = new SqlConnection("server=localhost;database=index;uid=baker;pwd=baker");
        Conn.Open();

        StreamReader objReader = new StreamReader("C:\\s.txt");
        string sLine ;
        sLine = objReader.ReadLine();
       // ArrayList arrText = new ArrayList();

        while (sLine != null)
        {
           
 
                sick(sLine);
            Console.WriteLine(sLine);
            sLine = objReader.ReadLine();
        }
        objReader.Close();
      
    }
}

关于原理,其实最简单,不用多说,域名,已经注册,还不错吧。

测试过速度还行。

程序中包括 将搜索结果插入数据库,曾经有一天晚上  足足抓了 26万条信息。

 


阅读全文(3910) | 评论:23 | 复制链接