免费注册 查看新帖 |

Chinaunix

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

perl 对两个文档之间的数据进行处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-02 22:34 |只看该作者 |倒序浏览
小弟因为要处理文档数据,初学perl,遇到了以下问题:


A 文件格式:
200800001 2008010114463569 105.526 29.3117 11.42
...
B 文件格式:
200800001 105.526142 29.311150 11.324
...

其中A和B文件中数据的第一栏均为编号,且A中的数据多于B
现想将A中编号与B相同的一行中的第二组数据(第二栏)加入到B文件中

于是写了以下代码:

#!/usr/bin/perl -w
open(SRC,"A.txt";

open(DRC,"B.txt";

@aa=<SRC>;

@bb=<DRC>;

chomp @aa;

chomp @bb;

close SRC;

close DRC;



open(REC,">tmp";

open(DEC,">dmp";

foreach $a(@aa){

$num=substr($a,1,9);

$time=substr($a,12,27);

}



foreach $b(@bb){

$num2=substr($b,1,9);

$jingdu=substr($b,12,21);

$weidu=substr($b,24,32);

$shendu=substr($b,35,40);

}


while ($num2==$num){

$line=$num2." ".$time." ".$jingdu." ".$weidu." ".$shendu.";
print DEC "$line\n";

}



close REC;

close DEC;


但是错误提示为:
Scalar found where operator expected at - line 49, near "print DEC "$line"
(Might be a runaway multi-line "" string starting on line 4
(Do you need to predeclare print?)
Backslash found where operator expected at - line 49, near "$line\"
(Missing operator before \?)



请大家帮忙解答错误之处,将不尽感激!

论坛徽章:
0
2 [报告]
发表于 2012-01-03 08:49 |只看该作者
49行
  1. $line=$num2." ".$time." ".$jingdu." ".$weidu." ".$shendu.";
复制代码
最后一个分号缺对应的分号。

论坛徽章:
0
3 [报告]
发表于 2012-01-03 10:12 |只看该作者
回复 2# kk861123
感谢您的回复,修改后运行了依然不对,好像问题不是出在这里。
请您看看在语句使用上是否有问题?比如while判断与foreach循环.
如果您有时间的话,是否可以帮忙写出您认为正确的代码?

   

论坛徽章:
0
4 [报告]
发表于 2012-01-03 11:44 |只看该作者
好像多个引号吧
print $line是你想要的么

论坛徽章:
0
5 [报告]
发表于 2012-01-03 13:15 |只看该作者
本帖最后由 kk861123 于 2012-01-03 16:29 编辑

回复 3# ct0330


   嗯...用法还是有些问题,try this ....
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open(SRC,"A.txt") or die($!);
  5. my %prec;
  6. while (<SRC>) {
  7.         chomp;
  8.         my @info = split;
  9.         $prec{$info[0]} = $info[1];
  10. }
  11. close(SRC);

  12. open(DRC,"B.txt") or die($!);
  13. open(DEC,">dmp")  or die($!);
  14. while (<DRC>) {
  15.         chomp;
  16.         my @info = split;
  17.         my $num  = shift @info;
  18.         if (exists $prec{$num}) {
  19.                 print DEC join(' ',$num,$prec{$num},@info);
  20.                 print DEC "\n";
  21.         }
  22. }
  23. close(DRC);
  24. close(DEC);
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-01-03 17:18 |只看该作者
#!/usr/bin/env perl
use strict;
use warnings;
my $re = {};
open FN,"file1";
while (<FN>){
my $num = (split)[0];
$re->{$num} = [split];
}
close FN;
unlink "file3";
open FILE,"file2";
open DEC,">>","file3";
while(<FILE>){
my $num = (split)[0];
my $text = $num." ".$re->{$num}->[1];
s/$num/$text/;
print DEC $_;
}
close FILE;
close DEC;

论坛徽章:
0
7
发表于 2012-01-04 22:04
回复 4# ludio333
对的,感谢您的回复,多交流学习!

   

论坛徽章:
0
8
发表于 2012-01-04 22:05
回复 5# kk861123
程序已经调试成功,感谢您的热心帮助,祝工作顺利!

   

论坛徽章:
0
9
发表于 2012-01-04 22:06
回复 6# ludio333
程序已经调试成功,非常感谢您的热心帮助,祝工作顺利!
   

论坛徽章:
0
10 [报告]
发表于 2012-01-05 09:19 |只看该作者
回复 4# ludio333
是的,问题已经解决,感谢您的回复,多交流。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP