0

我有一个这样的数据集:

10001;02/07/98;TRIO;PI;M^12/12/59^F^^SP^09/12/55

;;;;;M1|F1|SP1;11;10;12;10;12;11;1.82;D16S539

;;;;;M1|F1|SP1;8;8;8;8;10;8;3.45;D7S820

;;;;;M1|F1|SP1;14;12;12;11;14;11;1.57;D13S317

;;;;;M1|F1|SP1;12;12;13;12;13;8;3.27;D5S818

;;;;;M1|F1|SP1;12;12;12;12;12;8;1.51;CSF1PO

;;;;;M1|F1|SP1;8;11;11;11;11;8;1.79;TPOX

;;;;;M1|F1|SP1;6;9;9;6;8;6;1.31;TH01

我正在尝试提取不以数字开头的行的最后一个元素,即除第一行之外的所有行。我想将这些值放在一个名为 @markers 的数组中。

我正在尝试通过以下代码:

#!usr/bin/perl
use warnings;
use strict;

open FILE, 'test' || die $!;

while (my $line = <FILE>) {

    my @fields = (split /;/), $line;

    if ($line !~ m/^[0-9]+/) {

    my @markers = splice @fields, 0, @fields - 1;

    }
}

但这不起作用。有人可以帮忙吗?谢谢

4

2 回答 2

2
  • 您创建一个名为@markers每次循环的新变量。
  • my @fields = (split /;/), $line;意味着(my @fields = (split /;/, $_)), $line;。你的意思是my @fields = (split /;/, $line);
  • 'test' || die $!和刚才一样'test'

use strict;
use warnings;

open my $FILE, '<', 'test'
   or die $!;

my @markers;
while (<$FILE>) {
    chomp;
    next if /^\s*\z/;  # Skip blank lines.
    my @fields = split /;/;
    push @markers, $fields[-1]
        if $fields[0] eq '';
}
于 2012-10-08T21:48:02.377 回答
0

您没有正确使用函数 split() 。我在下面的代码中修复了它并打印了值:

#!/usr/bin/perl
use warnings;
use strict;

open FILE, 'test' || die $!;

while (my $line = <FILE>) {

    my @fields = split( /;/, $line);

    if ($line !~ m/^[0-9]+/) {

        print "$fields[-1]";
#    my @markers = splice @fields, 0, @fields - 1;

    }
}
于 2012-10-08T21:57:26.973 回答