0

そのため、ファイルから数値を読み取る電卓 C シェル スクリプトを作成しており、シェルが答えを返します。たとえば、数字のテキスト ファイルでは、次のようになります。

1129 3100 +

私のcshファイルは、実行されると返されます

Input from line 1 : 1129 3100 +
ARG1: 1129
ARG2: 3100
ARG3: +
4229

私の問題は、28行のファイルの28行目に到達すると、出力が次のようになることです。

Input from line 28 : 7 4 *=
set: No match.

私のコードによると、これは次のように返されます。

Input from line 28 : 7 4 *=
ARG1: 7
ARG2: 4
ARG3: *=
Invalid Input in line 28

これが私のコードです:

#!/bin/csh
# Usage: Performs math operations

@ linenum=0

foreach line ( "`cat calc_input.txt`")
    @ linenum += 1
    echo "Input from line $linenum : $line"
    set argv = ( $line )
    set var1 = $1
    set var2 = $2
    set var3 = $3
    echo "ARG1: $var1"
    echo "ARG2: $var2"
    echo "ARG3: $var3"
    switch ($var3)
            case +:
                    @ ans = $var1 + $var2
                    echo $ans
            breaksw
            case -:
                    @ ans = $var1 - $var2
                    echo $ans
            breaksw
            case x:
                    @ ans = $var1 * $var2
                    echo $ans
            breaksw
            case /:
                    if ( $var2 == 0 ) then
                            echo "Error: Divide by Zero"
                            continue
                    endif
                    @ ans = $var1 / $var2
                    echo $ans
            breaksw
            case %:
                    @ ans = $var1 % $var2
                    echo $ans
            breaksw
            default:
                    echo "Invalid Input in line $linenum"
            breaksw
    endsw
end

そして、ここに私が数字のために読まなければならないファイルがあります

1129 3100 +
-19 6 +
9 3 -
-7 6 -
9 3 /
4 8 /
35 6 /
12 3 %
13 3 %
4 19 %
11 9 x
4294967296 1024 x
-9 7 x
1024 0 /
14 63 <<
1234 5678 >>
1 2 3 4 +
1 +
3 -
7 x
12 /
91 %
7 ++
3 1 +=
6 2 -=
4 6 *
-11 7 *
7 4 *=

+、-、x、/、および % だけを気にする必要があります。正しい形式でないものはすべて、エラー メッセージを表示します。

ご協力いただきありがとうございます!

はい、これは宿題の問題です。csh はひどいものであり、ほとんどの人が使用していないことを知っています。私ではなく、先生に言ってください。

更新:問題のある行を番号ファイルの別の行に移動しようとしました。問題はまだありますが、スクリプトで次のことが発生するたびに発生します。

7 4 *=

したがって、テキスト ファイル内の配置には問題ありません。表現の問題です。

4

1 に答える 1

0

構文の問題が 1 つあります。デフォルト句に 1 文字がありません。ドキュメントを確認してください。それを理解できるはずです。

*それはさておき、csh (ワイルドカード)の意味を考えてみましょう。何が特別なの*=ですか?csh を文字としてのみ解釈するように制限する方法を考えてみてください。

Input from line 27 : -11 7 *
ARG1: -11
ARG2: 7
ARG3: calc_input.txt

ARG3がファイル名である理由を理解してください。

Input from line 28 : 7 4 *=
set: No match.

そのエラーメッセージはかなり具体的です。調べる。

「表現の問題です。」- csh が何をするかについて*です。globbingを調べてください。スクリプトに 1 行追加して、csh にグロビングを一時停止するように指示すると、スクリプトが機能します。

于 2013-02-26T03:02:29.420 に答える