usp-engineers-community / Open-usp-Tukubai

製品版 usp Tukubai (https://www.usp-lab.com/product.html) の Python によるオープンソース実装。
https://uec.usp-lab.com/TUKUBAI/CGI/TUKUBAI.CGI?POMPA=WHYOPEN
MIT License
136 stars 35 forks source link

divsen にnフィールドの行を与えたとき、先にコマンドライン引数で取得した key を使い尽くすと out of index を起こす様子? #26

Closed renpoo closed 3 years ago

renpoo commented 3 years ago

お世話になります。 『実践ユニケージ開発手法 02:シェルスクリプト学習編』の第14章『帳票出力』を写経していて、divsen がらみのエラーではないか、という件に遭遇しました。

こちらで divsen (Python)の中味を拝見したところ、196 行目で if i < f[0]: となっています。

このとき例えば 1 〜 5 のフィールドを持つ行を入力して echo "1 2 3 4 5" | divsen -s 2 3 4 と実行すると、list index out of range を起こして不正終了してしまいます。

先程の 196 行目の if 文を if len(f) == 0 or i < f[0]: として、コマンドライン引数で取得した key を使い尽くしたあとでも動くようにすると、とりあえず問題を回避できました。

これは、何故こうなっているのでしょうか。 場合によってはなんらかの修正をしていただいても宜しいでしょうか? 御検討のほど、宜しくお願いします。

USP-Lab commented 3 years ago

renpooさま。ご指摘ありがとうございます。 "list index ouf of range" で例外終了するのは意図した動作ではありません。 推薦いただいた修正方法をそのまま適用して問題なく動作するようになりました。

https://github.com/usp-engineers-community/Open-usp-Tukubai/commit/32a8aecca542fba288221b56e150e6634eee112a