从文件里得到所有的邮件地址(源代码)

很想实现类似 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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,OA系统通常都会有移动端应用程序,可以通过手机或平板等移动设备来使用。移动端应用程序的开发需要使用移动端的开发语言和技术,例如iOS平台使用Objective-C或Swift语言,Android平台使用Java语言进行开发。最新的OA系统通常会开发对应最新版本操作系统的移动端应用程序,以确保应用的兼容性和性能优化。移动端应用程序可以拥有与桌面端应用程序类似的功能,如收发邮件、查看和编辑文档、查看和管理任务日程等。用户只需要在手机应用商店搜索相应的OA系统移动端应用程序,下载安装后即可使用,无需另外安装额外的软件和插件。移动端应用程序的界面设计通常会根据手机设备的屏幕尺寸进行优化,以便用户在移动设备上能够更方便地操作和浏览信息。因此,无论是在办公室还是在外出办公时,用户都可以通过移动端应用程序随时随地访问和处理OA系统的相关事务。 ### 回答2: 是的,OA系统有移动端的源代码,而且这些源代码是最新的。移动端的OA系统已经成为越来越多企业的必备工具,因为它可以让员工随时随地通过手机或平板电脑访问和处理工作事务。移动端的源代码是为了满足各种移动设备的需求,包括Android和iOS系统。 OA移动端的源代码包括了系统的各个模块和功能,例如日程安排、工作审批、文档管理、通讯录、邮件等等。开发人员可以根据自己的需求对源代码进行定制和修改,以适应企业的业务流程和特定需求。而且,移动端的源代码也提供了友好的用户界面和用户体验,使得员工可以轻松地使用该系统进行工作。 通过拥有移动端的源代码,企业可以自主管理和维护OA系统,而不依赖于第三方提供的解决方案。这样可以更好地控制系统的更新和安全性,并且能够根据企业的发展需求进行灵活调整。另外,移动端的源代码也可以与其他系统进行集成,实现信息的共享和流程的自动化,提高工作效率和协同性。 总之,OA系统的移动端源代码是最新的,可以满足企业需要随时随地访问和处理工作事务的需求。企业可以根据自身的情况进行定制和修改,提高工作效率和管理能力。 ### 回答3: 是的,目前很多OA系统都提供了移动端源代码的下载和使用。移动端源代码是为了适应现代的办公场景,方便用户随时随地使用OA系统进行工作和管理。 移动端源代码一般包括了移动端应用的界面设计、交互功能、数据存储等方面的代码和资源文件。通过下载最新的移动端源代码,用户可以根据自己的需要进行定制和开发,以满足不同的业务需求和用户体验。 移动端源代码的更新频率也比较高,通常厂商会根据市场需求和用户反馈不断进行优化和改进。因此,用户可以通过下载最新版本的移动端源代码,获得最新的功能和体验,保持与时俱进。 当然,要使用移动端源代码,用户通常需要具备一定的开发能力或者请专业开发团队进行定制开发。同时,还需要根据具体的OA系统选择相应的移动端源代码版本,确保兼容性和稳定性。 总之,移动端源代码的提供使得用户可以根据自己的需求和喜好进行定制和开发,为移动办公提供更加便捷和高效的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值