免费注册 查看新帖 |

Chinaunix

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

perl 数组问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-06 13:12 |只看该作者 |倒序浏览
如下格式一个文本文件:
1 3
2 3
3 34
- 34
+ 34
sf 34
s2 34
999 34

现在我要匹配第一列的所有数字并打印,做了如下perl脚本:
(1)
#!/usr/bin/perl -w
open (FH,'<',"test.txt");
while(<FH>){
my @t=split(/ /,$_);
my $v=$t[0] if($t[0]=~/^[\d]+$/);
print $v;
print "\n";
}
close FH;

输出结果:
1
2
3
Use of uninitialized value in print at test.pl line 6, <FH> line 4.

Use of uninitialized value in print at test.pl line 6, <FH> line 5.

Use of uninitialized value in print at test.pl line 6, <FH> line 6.

Use of uninitialized value in print at test.pl line 6, <FH> line 7.

999

请教各位大侠,有什么办法能去掉“Use of uninitialized value in print at test.pl line 6, <FH> line 5.”这个报错(不是不报,而是要解决这个问题)。到底问题出在哪里,明明匹配了数字,另外说明,匹配规则肯定没错,我用单列文本做了一个脚本测试过了。

论坛徽章:
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 [报告]
发表于 2012-03-06 13:32 |只看该作者
回复 1# Qinxocy

何必这么费劲?

  1. perl -ne ' ($n) = m/^(\d+)/; print "$n\n" if $n ' t.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-03-06 13:38 |只看该作者
回复 2# MMMIX


    这个我要用脚本的形式写出来,上面这个我只是测试的。希望能根据我这个格式帮我找出问题。。

论坛徽章:
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
4 [报告]
发表于 2012-03-06 13:41 |只看该作者
Qinxocy 发表于 2012-03-06 13:38
 这个我要用脚本的形式写出来


难道脚本写到命令行中就不是脚本了?

论坛徽章:
0
5 [报告]
发表于 2012-03-06 13:55 |只看该作者
回复 4# MMMIX


    哎。。。。新手新手。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-06-28 12:03 |只看该作者
回复 1# Qinxocy [/

这个代码可以完成你的要求!

#!/usr/bin/perl -w
open (FH,'<',"test.txt");
my @t;
my $v;
while(<FH>){
@t=split(/ /,$_);
if($t[0]=~/^[\d]+$/){$v=$t[0] ;
print $v;
print "\n";}
else {print " ","\n";}
}
close FH;




   

论坛徽章:
0
7 [报告]
发表于 2012-06-29 17:09 |只看该作者
  1. #!perl -w
  2. use strict;
  3. # AUTHOR: niejieqiang

  4. while (<DATA>) {
  5.         next if /^\D/;
  6.         my @array=split/\s+/;
  7.         print $array[0],"\n";
  8. }
  9. __DATA__
  10. 1 3
  11. 2 3
  12. 3 34
  13. - 34
  14. + 34
  15. sf 34
  16. s2 34
  17. 999 34
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP