Как разобрать таблицу с помощью Perl - PullRequest
0 голосов
/ 08 января 2011
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

I, когда я даю Name в качестве входных данных, мне нужно вывести три столбца Mark.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 08 января 2011
#!/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
0 голосов
/ 08 января 2011

Предполагая, что это массив с именем @arr, где каждая запись представляет собой строку, и предполагая, что номер искомого студента находится в $num, вы можете использовать:

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

Это перебирает все записи в массиве.Он ищет строки, которые:

  • начинаются с «Студент»
  • , за которыми следует точное число $num (\b вокруг него указывают границы слов, поэтому это можетне быть частью другого числа)
  • сопровождаются пробелами
  • имеют шаблон, начинающийся и заканчивающийся максимально длинным числом.

Если это так, образец, начинающийся и заканчивающийся номером, захватывается и печатается.В этом случае это точно соответствует Mark1, Mark2 & Mark3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...