2011-01-08 40 views
0
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 

如果輸入是學生1,它必須顯示41 51 61那樣!如何使用perl解析表格

感謝你

+1

這功課嗎?如果是這樣,你有什麼嘗試,你堅持什麼? – 2011-01-08 11:07:32

回答

0

假設這是所謂的@arr一個數組,其中每個條目是一條線,並假設你正在尋找的是在$num學生的數量,你可以使用:

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

這將遍歷數組中的所有條目。它會查找行:

  • 開始「學生」
  • 後跟的確切數量$num(它周圍的\b S指定單詞邊界,所以這不可能是另一個數部分)
  • 後跟一些空格
  • 有一個模式以儘可能長的數字開始和結束。

如果是這樣,則以數字開頭和結尾的模式被捕獲並打印。在這種情況下,它恰好對應於Mark1,Mark2 & Mark3。

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