11

私のPerlコードでは、電子メールにアクセスしています。その中のテーブルをフェッチして、配列に解析する必要があります。私はそれを使用してそれをしました:

my @plain = split(/\n/,$plaintext);

ただし、には多くの空白要素があり@plainます。572個の要素があり、そのうちの約半分は空です。

私はここで何か間違ったことをしていますか?空白の要素を取り除くために、コードに何を追加/変更する必要がありますか?

4

4 に答える 4

18

grep出力なので、ホワイトペース以外の文字を含むエントリのみを取得します。

my @plain = grep { /\S/ } split(/\n/,$plaintext);
于 2012-07-06T15:21:45.687 に答える
4

それを行う正しい方法は、@dave-crossからここにあります

分割を修正する準備ができていない場合は、すばやく汚い:

foreach(@plain){
    if( ( defined $_) and !($_ =~ /^$/ )){
        push(@new, $_);
    }
}

編集:それがどのように機能するか

上記よりもエレガントで効率的な方法がありますが、すべてのPerl-y tmtowtdiと同様です!これが機能する方法は次のとおりです。

  1. 配列をループして、現在の配列要素に設定し@plainます$_

    foreach(@plain){

  2. 現在の要素をチェックして、興味があるかどうかを確認します。

    ( defined $_) # has it had any value assigned to it !($_ =~ /^$/ ) # ignore those which have been assigned a blank value eg. ''

  3. 現在の要素がこれらのチェックに合格した場合は、@newにプッシュします

    push(@new, $_);

于 2012-07-06T14:23:03.243 に答える
3

コードに1行追加する必要があり、それは機能します

   @plain= grep { $_ ne '' } @plain;
于 2017-10-13T20:55:00.077 に答える
0

これが私が使ったものです、遅すぎますが、これは良いものです、将来使用することができます

$t = "1.2,3.4,3.12,3.18,3.27";
my @to = split(',',$t);
foreach $t ( @to ){
    push ( @valid , $t );
}
my $max = (sort { $b <=> $a } @valid)[0];
print $max
于 2015-04-24T11:22:25.917 に答える