zui xin perl

本文介绍了一个使用Perl脚本从文件中解析特定格式Bug编号的方法。该脚本通过读取指定路径下的文件内容,根据预设的组名和包名筛选出包含Bug编号的行,并进一步提取出Bug编号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

print "pls input file path:/n";
$fpath=<STDIN>;
chop $fpath;
print "pls input pakage name:/n";
$pgname=<STDIN>;
chop $pgname;
print "pls input group name:/n";
$Gname=<STDIN>;
chop $Gname;
@listNo=&bugNo($fpath, $pgname, $Gname);
print "@listNo/n";

####################################################33
sub bugNo
{

 $filepath=$_[0];
 $packagename=$_[1];
 $groupname=$_[2];

 open(MYFILE,"$filepath");
 @test1= <MYFILE>;
 $num=@test1;

 @result=();
 $A="";
 $B="";

 $flag="0";
 $packagefalg="0";
 
 for($n=0; $n<=$num; $n++)
 {
  $item=$test1[$n];
  chop $item;

  ##检查是否是*****DESKT GRoup*****
  if ($item =~ //*+ ([a-zA-Z0-9 ]+)/*/)
  {
   if($1 eq "$groupname")
   {
    $flag="1";
   }
   else
   {
    $flag="0";
   }
  }

  if($flag eq "1")
  {
   ##检查是否是<package name>
   if ($item =~ /^< ([a-zA-Z.]+[a-zA-Z0-9-]+[a-zA-Z]+/d?)/)
   {
    if($1 eq "$packagename")
    {
     $packagefalg="1";
    }
    else
    {
     $packagefalg="0";
    }
    
   }
   
   if($packagefalg eq "1")
   {
    ##获取BUG NO,这里我们给子函数传了两个参数,
    ##一个是当前行的字符串
    ##一个是已经找到的bug 的数组(主要是让子函数直接将找到的)
    @result=&getbuginner($item,@result);
   }

  }
 ##返回查找到的数据
 @result;
}

##在以下getbuginner函数中,我们将试图处理以下几种情况
##
###1.we wewe jk GNOME bug #123123 RH bug #123123 sdfsdfw
##
###2.we wewe jk GNOME bug #123123 sdfsdfsdf
##
###3.we wewe jk RH bug #123123 sdfsdfsdf
##
###4.we wewe jk #123123 RH bug #123123 sdfsdfw
##
###5.we wewe jk #123123 Rsdsds sdfsd #123123 sdfsdfw
##
##以上五种情况,其实,对于3,4,5来说,我们并不需要特殊处理
##只要把#后面的bug号拿到就行了,也就是说只要该行没有出现GNOME bug
##那末,我们就直接提取#就行了。
##
##也就是说,我们可以先判断该行中是否有GNOME bug,
##如果有,那么就按照1,2来处理
##如果没有,那么直接提取#后面的bug号就行了。
##
##

sub getbuginner
{
 $item=$_[0];
 @result=$_[1];

    $pos=index($item,"GNOME bug");
    if($pos != 0)
    {
  ##这种情况是该行含有GNOME bug,
  ##那么在这里我们可以按照以上的1,2两种情况来处理

  ##对于1,2两种情况来讲,我认为只需要获得GNOME bug的位置,
  ##然后将该行分成3截
  ##例如,对于情况1
  ##we wewe jk GNOME bug #123123 RH bug #123123 sdfsdfw
  ##
  ##分成3截:
  ###1截:we wewe jk
  ###2截:GNOME bug #123123
  ###2截:RH bug #123123 sdfsdfw
  ##
  ##对于情况2
  ##we wewe jk GNOME bug #123123 sdfsdfsdf
  ##
  ##分成3截:
  ###1截:we wewe jk
  ###2截:GNOME bug #123123
  ###2截:sdfsdfsdf
  
  
  ##此处按照以上的分析加上相应代码
  
    }
    else
  ##这种情况是该行没有GNOME bug,
  ##那么在这里我们可以直接提取#bug no
  
  while($item =~ /(#[a-zA-Z0-9]+)/g)
  {
   $itemflag="0";
   for($a=0; $a<@result; $a++)
   {
    if(@result[$a] eq $B)
    {
     $itemflag="1";
     last;
    }
   }
   if ($itemflag eq "0")
   {
    @result=(@result, $B);
   }
  }
  
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值