-2

これがfile.txtであると仮定します

Name:Lab1:Lab2:Lab3:Lab4:Lab5:Lab6:Exam1:Exam2:Final

Annette Adams :8:24:19:24:10:12:43:35:98
Mary Beard:9:30:19:23:10:14:29:39:87
Antoinette Brown:9:16:18:22:9:12:19:31:79
.
.
.

Perlユーザーがコマンドラインに渡して結果を取得できるいくつかのオプションを使用してスクリプトを作成することは可能ですか。

たとえば getAverage.pl -l 3 file.txt、Lab3マークの平均を出力します。

可能であれば、全体的なプロセスは何ですか?

4

2 に答える 2

2

http://perldoc.perl.org/Getopt/Long.htmlを試してください 。ドキュメントから:

Getopt :: Longモジュールは、GetOptions()と呼ばれる拡張getopt関数を実装します。この関数は、GNU拡張機能を備えたコマンドラインオプションのPOSIX構文に準拠しています。一般に、これは、オプションが1文字ではなく長い名前を持ち、二重ダッシュ「-」で導入されることを意味します。従来の1文字のアプローチの場合と同様に、コマンドラインオプションのバンドルのサポートが提供されますが、デフォルトでは有効になっていません。

Perlでのコマンドラインオプションへのアクセスに関する一般的な情報については、perlvarドキュメントをお読みください:http: //perldoc.perl.org/perlvar.html#$ARGV

于 2012-10-17T06:04:47.610 に答える
-1

私はPythonで素早く汚い解決策をまとめました。それをperlに移植するのは簡単なはずです。

import sys
lines = open("file.txt",'r').readlines()
if len(sys.argv) > 2 and sys.argv[1] == "-l":
    try:
        number = int(sys.argv[2])
    except:
        print "Input a number after the -l switch."

    average = 0

    for i in lines:
        try:
            average += int(i.split(":")[number])
        except:
            pass

    average /= 3

    print "The average score for %s is %d" \
    %(lines[0].split(":")[number], average)

else:
    print "Computer says no."
于 2012-10-17T06:42:17.263 に答える