+ -
当前位置:首页 → 问答吧 → 请教perl中tie::file模块使用问题

请教perl中tie::file模块使用问题

时间:2010-08-20

来源:互联网

各位高手,我需要使用tie::file模块读取文件,然后比较文件中的某一行是否与我想要的匹配,如果匹配,输出1,不匹配输出0;
代码如下:
tie(@arry,'Tie::File',$filename) or die;
$i=0;
foreach(@arry)
{
    $line=/XXx/;
   if($arry[$i]=~$line)
   {print 1;}
   else
  {print 0;}
$i=$i+1;
}
此时却出现了问题,发现我的程序只能读取文件的第一行和最后一行,请各位高手支支招,怎样才能解决这个问题?

作者: qianyuinsour   发布时间: 2010-08-20

本帖最后由 Mr-Summer 于 2010-08-20 15:36 编辑

看见tie就缩ruan了;
是不是应该用($_=~$line);
然后不要$i=$i+1;



======================
我想错了,lz的代码是对的嘛

作者: Mr-Summer   发布时间: 2010-08-20

本帖最后由 qianyuinsour 于 2010-08-20 16:57 编辑

回复 Mr-Summer


    谢谢MR SUMMER!这个问题已经解决了,问题并不出在这段程序上,这段程序是没有问题的。
   另外还想请教个问题,基于上面的程序段,我想实现一个功能:从A.TXT文件读取一行,然后和B.TXT文件中的每一行去比对,如果发现有能够匹配上的行,则删掉B文件中的这一行,如果没有则不做操作。然后再从A.TXT文件读取一行,再进行比对,直到A.TXT这个文件结束。

我的代码如下:

  open CONA,"A.TXT"
  while(<>)
{
     $line=$_;
     $filename='./B.TXT';
     tie(@arry,'Tie::File',$filename) or die;
     $i=0;
     foreach(@arry)
    {
         if($arry[$i]=~$line)
           {
                 $arry[$i]='';
            }
     }
    untie(@arry);

}
close CONA;

遇到的问题是,当我删除了其中的一行后(实际上是将这一行置空,并没有删除),下一次执行while循环的时候,读不到所删除的那一行的下一行,不知道问题出在哪了,请帮忙解决下

作者: qianyuinsour   发布时间: 2010-08-20