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 に答える