2011-01-08 9 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 

入力がStudent 1の場合は41 51 61を表示する必要があります!perlを使用してテーブルを解析する方法

これは、各エントリはラインである@arrと呼ばれる配列、であると仮定すると、あなたに

+1

この宿題はありますか?もしそうなら、あなたは何を試しましたか? –

+3

そのテーブルのソースを追加することをお勧めします。 SQLによって駆動されるデータソースですか?それはファイルですか? –

+1

ファイルベースであると仮定すると、フィールドはタブで区切られますか?固定フォーマットですか?これまでに何を試みましたか? – Zaid

答えて

0

に感謝し、あなたが$numである探している学生の数を想定して、あなたが使用することができます。

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

これは、配列のすべてのエントリを繰り返し処理します。 「学生が」

  • が正確な数$num(その周り\b sが単語の境界を指定するので、これは別の番号の一部にすることはできません)
  • が続いていると

    • が始まります。これは、行を探します
    • の後ろに空白が1つ続き、できるだけ長いパターンの先頭と末尾には空白が付きます。

    もしそうなら、数字の先頭と末尾のパターンがキャプチャされて印刷されます。この場合、それは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 
    
    関連する問題