0

(a,b,c)テキスト ファイルには、a、b、c が倍精度実数のように見える行がたくさんあります(8.27605704077856,0.505526531790625,1.15577754382534e-05)。Perl で 10e-4 より小さい数値を 0 に置き換える簡単な方法はありますか?

編集:たとえば、処理されるテキスト ファイルは次のようになります。

\plotinstruction[color,style,width]
points{
(8.27,0.5,1.1e-05)
(8.26,1,4.1e-06)
(8.25,1.5,3e-06)
}

そして、私は新しいファイルに書きたい:

\plotinstruction[color,style,width]
points{
(8.27,0.5,0)
(8.26,1,0)
(8.25,1.5,0)
}
4

2 に答える 2

3

おそらく私は何かが欠けているかもしれませんが、おそらくの使用はmap役に立ちますか?

#!/usr/bin/env perl

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

my @values = (8.27605704077856, 0.505526531790625, 1.15577754382534e-05);
my @filtered_values = map(($_ > 1e-4) ? $_ : 0, @values);

print Dumper \@filtered_values;

結果:

$VAR1 = [
          '8.27605704077856',
          '0.505526531790625',
          0
        ];

入力を解析するには、正規表現を使用してコンマ区切りの数字の文字列を抽出し、それを使用splitして実行する Perl リストを取得しmapます。

于 2012-10-11T01:50:47.103 に答える
0

あなたは書ける:

perl -pwe 's/\d[\d.e+-]+/$& < 0.001 && $& > -0.001 ? "0" : $&/ge' < INPUT > OUTPUT

(-p一度に 1 行ずつ入力を に読み込み$_、プログラムを実行し、 を出力し$_、再度ループすることを意味し-wます; 警告を有効にします;-eプログラムがコマンドライン引数として直接指定されることを意味します;s///は正規表現置換です;/gこれは「グローバルな」置換であることを/e意味し、replacement-text は単なる変数補間を伴う文字列としてではなく、完全な Perl 式として扱われるべきであることを意味します.)

于 2012-10-11T01:58:12.020 に答える