如何使用perl解析表

时间:2011-01-08 11:04:48

标签: perl

Name         Mark1 Mark2 Mark3
Student 1      41   51    61 
Student 2      42   52    62 
Student 3      43   53    63  
Student 4      44   54    64 
Student 5      45   55    65

当我将Name作为输入时,我需要输出三个Mark列。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

假设这是一个名为@arr的数组,其中每个条目都是一行,并且假设您要查找的学生编号在$num,您可以使用:

foreach (@arr) {
    if (/^Student \b$num\b\s+(\d.*\d)/) {
        print "$2\n";
    }
}

这会迭代数组中的所有条目。它寻找以下行:

  • 以“学生”开头
  • 后跟确切的数字$num(其周围的\b指定字边界,因此这不能是另一个数字的一​​部分)
  • 后面跟着一些空白
  • 有一个模式以一个尽可能长的数字开头和结尾。

如果是,则捕获并打印以数字开头和结尾的图案。在这种情况下,它完全对应于Mark1,Mark2& MARK3。

答案 1 :(得分:0)

#!/usr/bin/perl
use warnings;
use strict;
my %hash = ();
print "Student No:"; #Eg:Student 1
chomp ( my $input = <>);
while (<DATA>) {
    next if /^Name/;
    chomp;
    my ($student, $no, @marks) = split;
    $hash{ "$student " . "$no" } = \@marks;
}
print join " ", @{$hash{ "$input" }};

__DATA__
Name         Mark1 Mark2 Mark3
Student 1      41   51    61
Student 2      42   52    62
Student 3      43   53    63
Student 4      44   54    64
Student 5      45   55    65