Perlを使用した偶数/奇数の計算

Perlを使用した偶数/奇数の計算

現在、私は4つのファイルで構成される非常に具体的なセットを生成するプロセスを使用しています。私が使用するプロセスは、以下の添付のプロセス図に示されています。

プロセスイメージ

最初の行は、以前の問題に対する解決策の一部です。任意のシリアル番号

perl -e 'for(RANGESTART..RANGESTOP){$x = $_ + 0; print "$x" . "','\n";}' > filename.csv

ご覧のとおり、RANGESTARTは通常30000000のように見えます。 RANGESTOPは通常30010000のように見え、30,000,000から10,000の数字を提供します。

検証目的(規制当局が要求する)のために生成された番号が一意で重複していないことを確認するチェックを実行する必要があります。この検証では、補助ファイル(filename-sort.csv)を生成する必要があります。これを達成するために、以下を使用しています。

sort -u -o filename1.csv filename2.csv

現在、2つのファイルがあります。

生産ラインからラベルを印刷するには、サードパーティ製アプリケーション(Seagull ScientificのBartender)を使用する必要があります。行の一方の側には偶数のみのファイルが必要で、もう一方の側には奇数のみのファイルが必要です。これを達成するために、以下を使用しています。

awk '{print>sprintf("%sfile.csv",NR%2?"even":"odd",PROCINFO["pid"])}' filename.csv

これで4つのファイルができました。

規制当局は、潜在的な監査を軽減するために4つの文書を必要とします。

プロセスはうまくいきましたが、新しい数値セットが必要になるたびに直接参加する必要がありました。

私の質問は2つの部分で構成されています。

パートA:すでにPerl、Sort、awkで行ったように、3つの別々のPerlコマンドですべてのことをしたいと思います。

パートB:パートAの3つのPerlコマンドを元の形式に保ちながら、これら3つのPerlコマンドを1つのPerlスクリプトに結合できるようにしたいです。

私はこのPerlスクリプトがユーザーに開始番号、終了番号、8桁の日付(YYYYMMDD)を要求すると思います。スクリプトが完了したら、最初のファイル(YYYYMMDD.csv)の生成確認、ソートファイルの生成の確認(YYYYMMDD-sort.csv)、および偶数/奇数ファイルの生成の確認(YYYYMMDD.csv)を確認するためにユーザー入力を要求する必要があります(ファイル.csv)。 csvと奇妙なファイル.csv)。

ファイル作成プロンプトが次のように動作すると思います。

  1. YYYYMMDD.csvを生成するには、「Y」または「YES」と入力します(他の答えはスクリプトを終了する必要があります)。
  2. YYYYMMDD-sort.csvを生成するには、「Y」または「YES」と入力します(別の答えを入力するとスクリプトを終了する必要があります)。
  3. Evenfile.csvとoddfile.csvを生成するには、「Y」または「YES」と入力します(他の答えはスクリプトを終了する必要があります)。

最後に、このPerlスクリプトをApple端末、Linux端末、およびWindows 7 Pro CMDラインで実行したいと思います。

私はあまりにも多くを要求しているのだろうか?それではなぜ?そうでなければどうでしょうか?

ベストアンサー1

あなたの仕事は次のように減ることができるようです:

perl -e '
    use POSIX qw(strftime);

    my ($start, $num) = (30_000_000, 10_000);
    my @all   = ( $start .. $start + $num -1 );  # 10,000 numbers
    my @odds  = grep { $_ % 2 == 1 } @all;
    my @evens = grep { $_ % 2 == 0 } @all;

    my $filename = strftime "%Y%m%d", localtime;
    my $fh;
    open $fh, ">", "$filename.csv";       print $fh join("\n", @all), "\n";   close $fh;
    open $fh, ">", "$filename-sort.csv";  print $fh join("\n", @all), "\n";   close $fh;
    open $fh, ">", "$filename-odds.csv";  print $fh join("\n", @odds), "\n";  close $fh;
    open $fh, ">", "$filename-evens.csv"; print $fh join("\n", @evens), "\n"; close $fh;
'

先ほど述べたように、ファイルがすでにソートされているので、あえてファイルをソートしなければならないということは理解できません。

おすすめ記事