0

要素が次のように見える配列があります(空白を含む)

@array = (
"    795     0|  1",
"      5   135| 17",
"     12   161| 17",
"    244    22| 17",
"     11    25| 17",
"    249   389| 17",
"  22383   443| 17"
);

要素を取り出す必要があります

"    795     0|  1"

そしてそれを3つの数字に分割して、空白と「|」を取り除きます。各行に。

@new_array =("795","0","1");

私が抱えている問題は、数字の空白とサイズが異なることです。

4

4 に答える 4

4

数字のみに一致する正規表現を使用します。

#!/usr/bin/perl

use strict ;
use warnings ;
use Data::Dumper ;

my @array = (
"    795     0|  1",
"      5   135| 17",
"     12   161| 17",
"    244    22| 17",
"     11    25| 17",
"    249   389| 17",
"  22383   443| 17"
);

foreach my $item ( @array ) {
  my @tmp = $item =~ m/(\d+)/g ;
  printf "'%s' => %s\n" , $item , Dumper( \@tmp ) ;
}

これは、文字列の先頭に空白がない場合にも機能します。

于 2012-04-11T21:02:58.013 に答える
3

一方通行:

my ($empty, @array)  = split(/\|?\s+/, "    795     0|  1");
于 2012-04-11T20:52:23.400 に答える
1

おそらく、このような簡単で読みやすいものが役立つ可能性があります。

#!/usr/bin/perl

use strict;
use warnings;

my @array = (
"    795     0|  1",
"      5   135| 17",
"     12   161| 17",
"    244    22| 17",
"     11    25| 17",
"    249   389| 17",
"  22383   443| 17"
);

my $eggs;

for my $spam (@array) {
    chomp $spam;
    $spam =~ s/^\s*//;
    push @$eggs,  [ split ( /\|?\s+/, $spam ) ];
}

for my $egg (@$eggs) {
    print join (", ", @$egg);
    print "\n";
}

結果は次のとおりです。

795, 0, 1
5, 135, 17
12, 161, 17
244, 22, 17
11, 25, 17
249, 389, 17
22383, 443, 17
于 2012-04-12T14:01:18.357 に答える
0

間隔が本当に均一である場合は、Perlを使用unpackしてデータを取得できます。http://perldoc.perl.org/perlpacktut.html#Packing-Textを参照してください

于 2012-04-12T03:43:17.270 に答える