ビットウォークの高橋です。
あまり凝った作りにしてもなんですが、数値判定のルーチンを追加しました。
Tclではcatchコマンドを使って演算エラーを検出する方法が簡単ですが、練習用
にと正規表現を使ってみました。1.2345e+67のような指数形式には今回対応して
いません。
なお、今回使った正規表現はチェックが不十分なので無駄や欠陥があるかもしれ
ません。どうも無責任ですみません。
--- ここから ---
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
# add_number
# n = n + m を計算する
proc add_number {n m} {
# 実数または整数であるかチェック
if {[regexp {^[-+]?[0-9]+\.*[0-9]*$} $m]} {
return [expr $n + $m]
} else {
puts "${m}は数字でないため、スキップしました。"
return $n
}
}
#-------
# メイン
# ------
# 初期値
set total 0
# コマンド引数の読み込み
if {$argc} {
foreach value $argv {
set total [add_number $total $value]
}
}
# 0が入力されるまでループ
while {[set value [gets stdin]] != 0} {
set total [add_number $total $value]
}
# 合計を出力
puts "合計:$total"
exit
--- ここまで ---
・実行例
例えばファイル名をaddition2.tclとして保存して、[TSabc:45]と同じように実
行します。
$ chmod +x ./addition2.tcl
$ ./addition2.tcl
-2.5
2e+5
2e+5は数字でないため、スキップしました。
4.5
+6.5
8
10.
0
合計:26.5
--
Keiichi Takahashi, bitWalk Co.,Ltd.
mailto:bitwalk@...
http://members10.tsukaeru.net/bitwalk/