免费注册 查看新帖 |

Chinaunix

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

對文件內容做修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-02 09:50 |只看该作者 |倒序浏览
請問各位先進

我今天想對一個文件作修改,用正規找到匹配的行之後在該行之下一行print出想要的字串

不過只要對第一個匹配的做就好了,之後就退出

一直失敗> <

EX.我的輸入檔案
      aaaaaa bbbbbbb cccccccc
      fffffffff ggggggg hhhhhhh
      aaaaaa ddddddd eeeeeee

修改後變成
      aaaaaa bbbbbbb cccccccc
      right!!!
      fffffffff ggggggg hhhhhhh
      aaaaaa ddddddd eeeeeee

該如何寫?

謝謝各位

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2014-01-02 10:02 |只看该作者
回复 1# kfcdog0419


    把你的代码贴上来看看。

论坛徽章:
0
3 [报告]
发表于 2014-01-02 10:18 |只看该作者
#!/usr/bin/perl
my $file = $ARGV[0];

open my $info7, $file or die "Could not open $file: $!";
open (OUTFILEA,">modify_$file");
while(<$info7>)
{
        
    if($line2=~ m/aaaaaa/){
         
                               
      }
            
             print OUTFILEA "$_";   
}   

close $info7;
close OUTFILEA;
========================================================================
目前就是原檔案在print一次
我該怎麼把匹配$line2行的下一行print出 right!!!
只要第一次匹配的就好

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-01-02 10:35 |只看该作者
回复 3# kfcdog0419

1. add
  use strict;
  use warnings;

2. $line2 ?
   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2014-01-02 10:47 |只看该作者
回复 3# kfcdog0419


    Try this:

  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;

  4. my $already_seen;

  5. while (<DATA>) {
  6.         if ((not $already_seen) and m/aaaaaa/) {
  7.                 print;
  8.                 print "right!!!\n";
  9.                 $already_seen = 1;
  10.         }
  11.         else {
  12.                 print;
  13.         }
  14. }

  15. __DATA__
  16. aaaaaa bbbbbbb cccccccc
  17. fffffffff ggggggg hhhhhhh
  18. aaaaaa ddddddd eeeeeee
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-01-03 11:50 |只看该作者
回复 5# MMMIX

大大以下是我的程式
=============================================================
open my $info2, "modify_$file" or die "Could not open $file: $!";
open (OUTFILEQAAA, ">result_$file");
for (my $i=0; $i<@uniq_net4; $i++){
while(<$info2>)
{
  
  
  
    if((not $already_seen) and m/\(([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\)\s+([^\s]+)\s+m=1\s+w=([^\s\(\)]+)\s+l=([^\s]+)\s+multi=1/){
         
        my $lookfor = $uniq_net4[$i];           
        if($4 eq $lookfor){
        
               
        
                $x_aa = 0.68e-6+$9+($size_net4[$i]-1)*($9+0.38e-6);        
               
               
                $y_pw = $8+2*((1.07e-6+0.3e-6+0.27e-6)*0.9);                              
                $x_pw = ($x_aa+2*(0.6e-6+0.3e-6+0.27e-6))*0.9;
                $a_pw = $x_pw*$y_pw;
                $p_pw = 2*($x_pw+$y_pw);
               
                $x_dw = ($x_aa+2*(0.6e-6+0.3e-6+0.27e-6+2e-6+1.5e-6))*0.9;
                $y_dw = $8+2*((1.07e-6+0.3e-6+0.27e-6+2e-6+1.5e-6)*0.9);
                $a_dw = $x_dw*$y_dw;
                $p_dw = 2*($x_dw+$y_dw);
               
                print OUTFILEQAAA;
                print OUTFILEQAAA "// $uniq_net4[$i] is found in $size_net4[$i] lines \n";
                print OUTFILEQAAA "Dpw_$uniq_net4[$i] ( $uniq_net4[$i] iso$i ) pwdnw_iso area=$a_pw pj=$p_pw\n";
                print OUTFILEQAAA "Ddnw_$uniq_net4[$i] ( iso$i 0 ) dnwpsub_iso area=$a_dw pj=$p_dw\n\n";
                $already_seen = 1;            
               
               
        
               
        }
               
      }
      else {
                print OUTFILEQAAA;
        }     
}
}

================================================================
我一個@uniq_net4會print出一組data
我現在都只有$uniq_net4[0]成功印出

改如何修改 哪裡搞錯了!

謝謝各位大大

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
7 [报告]
发表于 2014-01-03 14:49 |只看该作者
{:2_172:}
  1. for (my $i=0; $i<@uniq_net4; $i++){
  2. while(<$info2>)
  3. {
复制代码
  1. my @info2 = <$info2>;
  2. for (my $i=0; $i<@uniq_net4; $i++){
  3.     for (@info2){
复制代码
回复 6# kfcdog0419


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2014-01-03 15:15 |只看该作者
回复 6# kfcdog0419


    看你这代码的意思,是要用 @uniq_net4 里面的每个元素把整个 modify_$file 都处理一遍?如果确实是这样的话,应该这么写代码:

  1. open my $info2, "modify_$file" or die "Could not open $file: $!";
  2. open (OUTFILEQAAA, ">result_$file");
  3. my $already_seen;
  4. foreach my $lookfor (@uniq_net4) {
  5.         while(<$info2>)
  6.         {



  7.                 if((not $already_seen) and m/\(([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\)\s+([^\s]+)\s+m=1\s+w=([^\s\(\)]+)\s+l=([^\s]+)\s+multi=1/){

  8.                         if($4 eq $lookfor){



  9.                                 $x_aa = 0.68e-6+$9+($size_net4[$i]-1)*($9+0.38e-6);        


  10.                                 $y_pw = $8+2*((1.07e-6+0.3e-6+0.27e-6)*0.9);                              
  11.                                 $x_pw = ($x_aa+2*(0.6e-6+0.3e-6+0.27e-6))*0.9;
  12.                                 $a_pw = $x_pw*$y_pw;
  13.                                 $p_pw = 2*($x_pw+$y_pw);

  14.                                 $x_dw = ($x_aa+2*(0.6e-6+0.3e-6+0.27e-6+2e-6+1.5e-6))*0.9;
  15.                                 $y_dw = $8+2*((1.07e-6+0.3e-6+0.27e-6+2e-6+1.5e-6)*0.9);
  16.                                 $a_dw = $x_dw*$y_dw;
  17.                                 $p_dw = 2*($x_dw+$y_dw);

  18.                                 print OUTFILEQAAA;
  19.                                 print OUTFILEQAAA "// $uniq_net4[$i] is found in $size_net4[$i] lines \n";
  20.                                 print OUTFILEQAAA "Dpw_$uniq_net4[$i] ( $uniq_net4[$i] iso$i ) pwdnw_iso area=$a_pw pj=$p_pw\n";
  21.                                 print OUTFILEQAAA "Ddnw_$uniq_net4[$i] ( iso$i 0 ) dnwpsub_iso area=$a_dw pj=$p_dw\n\n";
  22.                                 $already_seen = 1;            




  23.                         }

  24.                 }
  25.                 else {
  26.                         print OUTFILEQAAA;
  27.                 }     
  28.         }
  29.         $already_seen = undef;
  30.         seek $info2, 0, 0;
  31. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP