中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 字符串
从文件里得到所有的邮件地址(源代码)
作者:gggxin 时间:2001-10-10 10:13 出处:互联网 责编:chinaitpower
              摘要:从文件里得到所有的邮件地址(源代码)

很想实现类似 php函数里的 ereg 功能.欢迎探讨

/*
 * 从文件里得到邮件地址 2003-2-8 17:15
 */
#include <stdlib.h>
#include <stdio.h>
#define mailMaxLen 20
#define bufMaxLen 200

long filesize(FILE *stream)
{
 long curpos, length;
 curpos = ftell(stream);
 fseek(stream, 0L, SEEK_END);
 length = ftell(stream);
 fseek(stream, curpos, SEEK_SET);
 return length;
}

int main(int argc,char *argv[])
{
 FILE *fp,*fp_write;
 int i,temp_len;
 int bool_find=0,bool_finished=0;
 long file_len=0;
 char fileName[30],write_file[30];
 char mail_data[50];     //保存得到的临时邮件
 char *buf;
 char *p,*mail_begin,*temp_p;
 if(argc!=2)
 { printf("error!\nExp: %s yourmail.dat\n",argv[0]);
  return 0;
 }
 sprintf(write_file, "tmp_%s", argv[1]);  //生成要写入的文件名
 strcpy(fileName, argv[1]);
 if((fp=fopen(fileName,"rb"))==NULL)
 { printf("\nCan't open The file for %s to read! \n",fileName);
  printf("Press any key to halt!");
  return(0);
 }

 if((fp_write=fopen(write_file,"w"))==NULL)
 { printf("\nCan't open The file for %s to write! \n",fp_write);
  printf("Press any key to halt!");
  return(0);
 }

 file_len=filesize(fp);
 buf=(char *)malloc(file_len);
 fread(buf,file_len,1, fp);
 for(p=buf;*p!='\0';p++)
 {
//  if(*p=='_' || *p=='.' || (*p>='0' && *p<='9') || (*p>='a' && *p<='z') || (*p>='A' && *p<='Z') )

  if(*p=='@')
  {
   bool_finished=0;
   bool_find=0;
   mail_begin=p;
   temp_len=0;
   while(temp_len<mailMaxLen && p!=buf)//后退,找到邮箱名
   {
    p--;
//如果符合标准的
    if(*p=='_' || *p=='-' ||  *p=='.' || (*p>='0' && *p<='9') || (*p>='a' && *p<='z') || (*p>='A' && *p<='Z'))
    {
     temp_len++;
    }
    else
    {
     break;
    }
   }
   p++;//指向正确的开始
//eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email))
   if(mail_begin!=p)   //符合条件了
   {
    temp_p=mail_begin;  //这时temp_p 指向@处
    mail_begin=p;   //记录邮件名开始地址
    p=++temp_p;    //p指向@后的第一个字符
//    printf("%s %c","ok",*temp_p);

    //接下来的第1个字符应该是a-z 0-9 之间
    while((*p>='0' && *p<='9') || (*p>='a' && *p<='z') || (*p>='A' && *p<='Z') && *p!='\0')
    {
     p++;
     //紧接着应该是a-z -
     if(*p=='-' || (*p>='0' && *p<='9')  || (*p>='a' && *p<='z') || (*p>='A' && *p<='Z'))
     { p++;
     }
     else
     { bool_find=0;
      break;
     }
     temp_len=0;   //cd.digital@cfan.com.cn
     while(temp_len<mailMaxLen && *p!='\0')
     { if(*p=='-' || (*p>='0' && *p<='9')  || (*p>='a' && *p<='z') || (*p>='A' && *p<='Z'))
      { p++;
       temp_len++;
      }//
      else if(*p=='.')//找到点.了  +[a-z]{2,3}$
      { bool_find++;//找到一段了
       temp_p=p;  //temp_p 指向.所在的位置
       p++;
       break;
      }
      else
      { bool_finished=1; //退出循环
       break;
      }
     }//while(temp_len<mailMaxLen && *p!='\0')
     if(bool_finished==1 && bool_find==0)//不符合
      break;
    }//while
   }//   if(mail_begin!=p)   //符合条件了
// ggg@chinatoolsnet.cnggg _w@163.net
   if(bool_find>0)
   {
    p=temp_p;  //p退到最后一个.的位置
    p=p+3;
    if(!((*p>='a' && *p<='z') || (*p>='A' && *p<='Z'))) //最后的 .net 不符合
    { p--;
    }
/*
    for(temp_p=mail_begin;temp_p<=p;temp_p++)
    { printf("%c",*temp_p);
    }
*/
//   strncpy(mail_data, mail_begin, 3);
    fwrite(mail_begin, p-mail_begin+1, 1, fp_write);
    fputc('\n',fp_write);
//    printf("%c",'\n');
    *p=' '; //这样做是为了下次检查时从此开始
   }
  }//  if(*p=='@')
//  printf("%c",*p);
 }//for
 fclose(fp);
 fclose(fp_write);
 free(buf);
 printf("\n--------------------\nok!");
 printf("\nfile writed to '%s'!",write_file);

 return(0);
}

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有