免费注册 查看新帖 |

Chinaunix

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

求助perl 代码合并生成一个文件--谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-08 19:46 |只看该作者 |倒序浏览
a.txt

.ic v(o<0> )=0
.ic v(o<1> )=0
.ic v(o<2> )=0
.ic v(o<3> )=0
.ic v(o<4> )=0
.ic v(o<5> )=0
.ic v(o<6> )=0

b.txt

(xddr_model2.xi1.xzhalf2.260)
(xddr_model2.xi1.xzhalf2.261)
(xddr_model2.xi1.xzhalf2.264)
(xddr_model2.xi1.xzhalf2.26
(xddr_model2.xi1.xzhalf2.269)
(xddr_model2.xi1.xzhalf2.270)

上面是两个文件的内容,我想生成一个c.txt具体格式如下:

.ic v(xddr_model2.xi1.xzhalf2.260) =0
.ic v(xddr_model2.xi1.xzhalf2.261) =0
.ic v(xddr_model2.xi1.xzhalf2.264) =0
.ic v(xddr_model2.xi1.xzhalf2.26 =0
.ic v(xddr_model2.xi1.xzhalf2.269) =0
.ic v(xddr_model2.xi1.xzhalf2.270) =0

我想用perl生成这个c.txt文件,
谢谢大家的帮助

[ 本帖最后由 ljhn007 于 2008-7-8 19:49 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-07-08 20:12 |只看该作者
#!/usr/bin/perl

use strict;
use warnings;

open A_FILE, 'a.txt'
    or die;

open B_FILE, 'b.txt'
    or die;

open C_FILE, ">c.txt"
    or die;

while (<A_FILE>) {
    chomp(my $t = <B_FILE>);
        s/o<\d>/\Q$t\E/;
        print C_FILE $_;
}


——————————————————————
没调试,不知道有没有错误。

论坛徽章:
0
3 [报告]
发表于 2008-07-08 20:23 |只看该作者

回复 #2 cobrawgl 的帖子

#!/usr/bin/perl
use strict;
use warnings;
open A_FILE, 'a.txt' or die;
open B_FILE, 'b.txt' or die;
open C_FILE, ">c.txt" or die;
while (<A_FILE>) {
    my $t = <B_FILE>;
        s/o<\d>/\Q$t\E/;
        print C_FILE $_;
}

执行后error

Use of uninitialized value in quotemeta at ./test.pl line 9, <B_FILE> line 6.
Use of uninitialized value in quotemeta at ./test.pl line 9, <B_FILE> line 6.
Use of uninitialized value in quotemeta at ./test.pl line 9, <B_FILE> line 6.


c.txt 输出入下

.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.260\)\=0\
)=0
.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.261\)\=0\
)=0
.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.264\)\=0\
)=0
.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.268\)\=0\
)=0
.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.269\)\=0\
)=0
.ic v(\.ic\ v\(xddr_model2\.xi1\.xzhalf2\.270\)\=0\
)=0
.ic v()=0
.ic v()=0

论坛徽章:
0
4 [报告]
发表于 2008-07-08 20:29 |只看该作者
顶一下

论坛徽章:
0
5 [报告]
发表于 2008-07-08 20:31 |只看该作者
刚才想多了

#!/usr/bin/perl

use strict;
use warnings;

open A_FILE, 'a.txt'
    or die;

open B_FILE, 'b.txt'
    or die;

open C_FILE, ">c.txt"
    or die;

while (<A_FILE>) {
    chomp(my $t = <B_FILE>);
        s/\(o<\d>\s+\)/$t/;
        print C_FILE $_;
}


——————————————

你 a 和 b 不是一一对应的吗,a 长 b 短 啊

论坛徽章:
0
6 [报告]
发表于 2008-07-08 20:34 |只看该作者

回复 #3 ljhn007 的帖子

谢谢我搞定了,谢谢

论坛徽章:
0
7 [报告]
发表于 2008-07-08 20:35 |只看该作者
既然不一样长,这样好些

#!/usr/bin/perl

use strict;
use warnings;

open A_FILE, 'a.txt'
    or die;

open B_FILE, 'b.txt'
    or die;

open C_FILE, ">c.txt"
    or die;

while (<B_FILE>) {
    chomp;
        my $t = <A_FILE>;
   
        $t =~ s/\(o<\d>\s+\)/$_/;
   
        print C_FILE $t;
}

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

回复 #7 cobrawgl 的帖子

是的,长短不一样,但还是不行,我感觉还是

$t =~ s/\(o<\d>\s+\)/$_/; 这句有问题

生成c.txt如下
.ic v(o<0>)=0
.ic v(o<1>)=0
.ic v(o<2>)=0
.ic v(o<3>)=0
.ic v(o<4>)=0
.ic v(o<5>)=0
.ic v(o<6>)=0
.ic v(o<7>)=0


和a.txt一样了


谢谢,还是有问题。。。Thanks

[ 本帖最后由 ljhn007 于 2008-7-8 21:00 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-07-08 21:12 |只看该作者
#!/usr/bin/perl
use warnings;
use strict;

my @r;
open FILE1,"b.txt";
open FILE2,">","c.txt";

while(<FILE1>)
{
    chomp;
    push @r,$_ if /(\(.*\))/;
}

foreach (@r)
{
    print FILE2 ".ic v".$_," =0\n";
}

论坛徽章:
0
10 [报告]
发表于 2008-07-08 22:49 |只看该作者
我的大致解法,大致测试了一下通过了

open A,"<a.txt";
open B,"<b.txt";
open C,">c.txt";
chomp(@b=<B>);
while(<A>) {
        s/\(.*\)/$b[$.]/;
        print C "$_";
}

[ 本帖最后由 hdc1112 于 2008-7-8 22:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP