一个perl问题
时间:2011-07-06
来源:互联网
#!/usr/bin/perl -w
use strict;
our $WORK_PATH = $ARGV[0];
#my $dir = "d:\\test\\";
open(FILE_A,"$WORK_PATH/A.txt") || die;
my @in_a=<FILE_A>;
close(FILE_A);
open(FILE_B,"$WORK_PATH/B.txt") || die;
my @in_b=<FILE_B>;
close(FILE_b);
open my $out , ">$WORK_PATH/C.txt" or die;
foreach my $tmpb (@in_b)
{
chomp($tmpb);
our $tmpb1 = substr($tmpb,rindex($tmpb,':')+1);
print "$tmpb1","\n";
our $tmpb2 = substr($tmpb,0,rindex($tmpb,':'));
print "$tmpb2","\n";
foreach (@in_a)
{
chomp;
print "$tmpb2\n";
print "$tmpb1\n";
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
}
last;
}
A文件:
10.1.1.1 xxxxxxxx
10.1.1.2 xxxxxxxx
10.1.1.3 zzzzzzzz
10.1.1.4 xxxxxxxx
10.1.1.5 xxxxxxxx
10.1.1.6 xxxxxxxx
10.1.1.7 yyyyyyyy
10.1.1.8 xxxxxxxx
10.1.1.9 yyyyyyyy
10.1.1.10 yyyyyyy
B:
xxxxxxxx:你欠水费
yyyyyyyy:你欠电费
zzzzzzzz:你欠气费
现在要把xxxxxxxx yyyyyyyy zzzzzzzz 替换成响应的文字。 s/$tmpb2/$tmpb1/ 怎么不起效?
use strict;
our $WORK_PATH = $ARGV[0];
#my $dir = "d:\\test\\";
open(FILE_A,"$WORK_PATH/A.txt") || die;
my @in_a=<FILE_A>;
close(FILE_A);
open(FILE_B,"$WORK_PATH/B.txt") || die;
my @in_b=<FILE_B>;
close(FILE_b);
open my $out , ">$WORK_PATH/C.txt" or die;
foreach my $tmpb (@in_b)
{
chomp($tmpb);
our $tmpb1 = substr($tmpb,rindex($tmpb,':')+1);
print "$tmpb1","\n";
our $tmpb2 = substr($tmpb,0,rindex($tmpb,':'));
print "$tmpb2","\n";
foreach (@in_a)
{
chomp;
print "$tmpb2\n";
print "$tmpb1\n";
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
}
last;
}
A文件:
10.1.1.1 xxxxxxxx
10.1.1.2 xxxxxxxx
10.1.1.3 zzzzzzzz
10.1.1.4 xxxxxxxx
10.1.1.5 xxxxxxxx
10.1.1.6 xxxxxxxx
10.1.1.7 yyyyyyyy
10.1.1.8 xxxxxxxx
10.1.1.9 yyyyyyyy
10.1.1.10 yyyyyyy
B:
xxxxxxxx:你欠水费
yyyyyyyy:你欠电费
zzzzzzzz:你欠气费
现在要把xxxxxxxx yyyyyyyy zzzzzzzz 替换成响应的文字。 s/$tmpb2/$tmpb1/ 怎么不起效?
作者: zjm6533637 发布时间: 2011-07-06
把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";
但是,你的程序有逻辑问题,这个请LZ自己解决。
另外,类似的问题应该用HASH解决,而不是匹配。
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";
但是,你的程序有逻辑问题,这个请LZ自己解决。
另外,类似的问题应该用HASH解决,而不是匹配。
作者: iamlimeng 发布时间: 2011-07-06
把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";
但是,你的程序有逻辑问题,这个请LZ自己解决。
另外,类似的问题应该用HASH解决,而不是匹配。
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";
改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";
但是,你的程序有逻辑问题,这个请LZ自己解决。
另外,类似的问题应该用HASH解决,而不是匹配。
作者: iamlimeng 发布时间: 2011-07-06
LZ应该希望写下面的代码:
复制代码
- #!/usr/bin/perl
-
- use strict;
- #our $WORK_PATH = $ARGV[0];
-
- my $WORK_PATH = "d:/t";
-
- open(FILE_A,"$WORK_PATH/A.txt") || die;
- my @in_a=<FILE_A>;
- close(FILE_A);
-
- open(FILE_B,"$WORK_PATH/B.txt") || die;
- my @in_b=<FILE_B>;
- close(FILE_b);
-
- my %hash;
- foreach (@in_b) {
- chomp;
- my ($key,$value) = split /:/;
- $hash{$key} = $value;
- }
-
- open my $out , ">$WORK_PATH/C.txt" or die;
- foreach (@in_a) {
- chomp;
- my ($ip,$key) = split /\s+/;
- print "$ip $hash{$key}\n";
- print $out "$ip $hash{$key}\n";
- }
- close $out;
作者: iamlimeng 发布时间: 2011-07-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28