免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2334 | 回复: 12
打印 上一主题 下一主题

请管理员删帖 谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-07 15:06 |只看该作者 |倒序浏览
请删除

[ 本帖最后由 albert198511 于 2009-7-9 13:38 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-07 15:20 |只看该作者

回复 #1 albert198511 的帖子

while(<in_fp>
    {
        if(m/(\.)/)  (这个有什么用)
        {
            if(m/OK/)
            {
                $passed = $passed + 1;
            }   
            $total = $total + 1;
        }
    }

论坛徽章:
0
3 [报告]
发表于 2009-07-07 15:55 |只看该作者
是文件的第一行没有进行条件判断,请问该如何处理?

第一行的格式对吗?正常读入$_了吗?

第一行在总数中应该加2,但总数却只记录了一个,请问应该怎样判断?

循环判断每一行中.的个数,循环了多少次总数就加多少

论坛徽章:
0
4 [报告]
发表于 2009-07-07 17:45 |只看该作者
原帖由 Perl_Er 于 2009-7-7 15:20 发表
while(
    {
        if(m/(\.)/)  (这个有什么用)
        {
            if(m/OK/)
            {
                $passed = $passed + 1;
            }   
            $total = $total + 1;
   ...


谢谢指点 这个就是用正则表达式匹配每行需要的文件 因为“.a-a-1” 是文件的名字 后面的“OK” 或者“No”是文件执行的结果 成功或者失败

现在要统计成功占总文件数的百分比

论坛徽章:
0
5 [报告]
发表于 2009-07-07 17:56 |只看该作者
原帖由 yashiro_lj 于 2009-7-7 15:55 发表

第一行的格式对吗?正常读入$_了吗?


循环判断每一行中.的个数,循环了多少次总数就加多少




谢谢指点

第一行的格式是正确的,应该如何判断是否正常读入$_?谢谢!

我也想判断一个每行中“.”的个数,但是不知道应该如何写,逻辑有些混乱。。。

我理解的while( <in_fp> ) 是读入整个文件,并且每次循环按行进行处理,但是每次循环读入的内容保存在哪里?可不可以用一个变量来存储?

也就是说,对于while循环体内,每次循环只能判断一行,这样理解对吗?

我的理解可能有偏差,肯定大虾们赐教。

论坛徽章:
0
6 [报告]
发表于 2009-07-07 18:38 |只看该作者
应该如何判断是否正常读入$_?

print

我也想判断一个每行中“.”的个数,但是不知道应该如何写

可以用while(m//g),然后在循环中计数

我理解的while( <in_fp> ) 是读入整个文件

是每次读入一行,并非读入整个文件

但是每次循环读入的内容保存在哪里?

你的代码中是存在$_中

可不可以用一个变量来存储?

可以,把while( <in_fp> ) 改成while($var = <in_fp>) 就行

也就是说,对于while循环体内,每次循环只能判断一行,这样理解对吗?

对。你代码的这种写法一次只会读入一行,当然只能判断一行了

论坛徽章:
0
7 [报告]
发表于 2009-07-07 20:58 |只看该作者
原帖由 yashiro_lj 于 2009-7-7 18:38 发表

print


可以用while(m//g),然后在循环中计数


是每次读入一行,并非读入整个文件


你的代码中是存在$_中


可以,把while(  ) 改成while($var = ) 就行


对。你代码的这种写法一次只会读 ...



大侠您好,多谢您耐心指点,我做了两种改动分别试了一下:
一种是:这种能打出来全部信息,但是统计结果passed和total都为0
while( <in_fp> )
    {
        if($var = m/(\.)/)
        {
            print $var;
            if(m/OK/)
            {
                $passed = $passed + 1;
            }   
            $total = $total + 1;
        }
    }
第二种是:这种能打出来全部信息,统计结果passed和total都正确
while( <in_fp> )
    {
        print $_;
        if(m/(\.)/)
        {
            if(m/OK/)
            {
                $passed = $passed + 1;
            }   
            $total = $total + 1;
        }
    }

以上两种都是在正常情况下测试的结果,如果出现“.a-a-1   .b-b-22 OK”情况,第二种的total少1(就是同一行后面部分没做判断),但OK总数正确

还是没有想明白如何统计这个total的总数,即如何循环判断每一行中"\."的个数,请指教,谢谢!

论坛徽章:
0
8 [报告]
发表于 2009-07-08 08:50 |只看该作者

回复 #7 albert198511 的帖子

第一种写法有误,$var变量没有正确赋值;匹配绑定应该用=~,而不是=

第二种循环判断每一行中"\."的个数,请参考perlrequick文档中关于正则/g修饰符的用法和示例

论坛徽章:
0
9 [报告]
发表于 2009-07-08 09:50 |只看该作者
原帖由 yashiro_lj 于 2009-7-8 08:50 发表
第一种写法有误,$var变量没有正确赋值;匹配绑定应该用=~,而不是=

第二种循环判断每一行中"\."的个数,请参考perlrequick文档中关于正则/g修饰符的用法和示例


while( <in_fp> )
    {
        if(m/(\.)/g)
        {
            if(m/OK/g)
            {
                $passed = $passed + 1;
            }   
            $total = $total + 1;
        }
    }

感谢大侠指点,我查阅了关于/g资料,“/g允许在字符串中的多处进行匹配,指定要保留的部分”。

如上改法,/g只是保留了“\.”,而至于“\.”的个数还是不知道如何记录,上面的写法中,如果对于“.a-a-1   .b-b-22 OK”情况,总数total还是少1的。。。。

小弟愚钝,恳请指点

论坛徽章:
0
10 [报告]
发表于 2009-07-08 10:32 |只看该作者

回复 #9 albert198511 的帖子

  1. $x = "cat dog house"; # 3 words
  2.     while ($x =~ /(\w+)/g) {
  3.         print "Word is $1, ends at position ", pos $x, "\n";
  4.     }
复制代码

perlrequick中自带的示例,请参考。

BTW,你有没有看perlrequick这个文档啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP