- ベストアンサー
COBOL等でのHIGH_VALUEについて
いつもいろいろ教えていただきありがとうございます。 先日職場で仕様書に「HIGH_VALUE」という単語がでてきました。 ネットで調べましたがCOBOL由来の技法ということまでしかわかりませんでした。 C言語のソースもありましたが構文的には読めたのですが なにをしているかは理解できませんでした。 どうか教えてください。 また、この技法は汎用機で使われた技法で 現在使うには注意が必要だという記述がありました。 この点についてもご教示いただけたら幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
既に回答が出ていますように、16進数で’FF’です。 古い富士通のオフコンでは、レコードの先頭が’FF’のものは削除レコードされました。当時のコンパイラでDELETE命令がなく、止むを得ず、MOVE HIGH-VALUE TO レコード名.などとしていた事を思い出します。若しかすると古いコンパイラと互換性をもたせるために、いまだにHIGI-VALEや’FF’をレコードに送りREWRITEしてしまうと当該レコードを削除するようになっているのかもしれません。その場合には注意が必要でしょう。 当該コンパイラの仕様書又はマニュアルなどのどこかに明記してあるはずだとは思いますが・・・。
その他の回答 (4)
0か1みたいに、ただのフラグですよ、あまり気にすることありませんよ
#2です。 またマッチングでも使います。 ファイルを全部読み終えたという意味でキーに最高値であるHIGH-VALUEをセットします。 READ A-FILE AT END MOVE HIGH-VALUE TO A-KEY というように。 AーFILEを全部読み終えた時点でA-KEYの内容が最高値なので マッチングしないというテクニックです。
HIGH VALUEというのは16進数で言うと”FF"のことです。 よくテーブルの終わりという意味で使います。 たとえば、配列Aというのがあったとします。 01 b. 03 A PIC X(1) OCCURS 10. で MOVE HIGH-VALUE TO B. とやるとA(0)~A(10)まで”FF”になります。 そのあと A(0)から任意数代入します。 で PERFORM VARYING I FROM 1 BY 1 UNTIL A(I) = HIGH-VALUE DISPLAY A(I) END-PERFORM とやると 配列Aに代入した分だけ出力されるというわけです。
補足
回答ありがとうございます。 ということは、入力する文字列+1文字の配列を 確保しなければならないということでしょうか?
- bonnumaman
- ベストアンサー率49% (82/166)
読んで字のごとく、考えうる最大の値です。 LOW_VALUEはその逆で最小の値です。 注意がどんな注意かわかりませんが、例えば16進で 00 が FF 00 とすると、LOW_VALUEは 00 00 だったと思うのでHIGH_VALUEは 99 99 という値のことになるのかな。 通常16進で99 99というコードは存在しないので文字ではないです。 使い方はSTART命令の前にレコードを位置づけするために先頭のレコード(LOW_VALUE)、もしくは最後尾のレコード(HIGH_VALUE)という意味で使います。
補足
回答ありがとうございます。 注意は以下のサイトで見かけました。 http://otn.oracle.co.jp/forum/message.jspa?messageID=28003298 asciiだとLOW-VALUE00(NUL)で、 HIGH-VALUEが(対応不明)となるわけですね。 これをフラグとするわけですね。少し分かった気がします。
補足
回答ありがとうございます。 仕様書ではマッチングに使っていました。 汎用機では固定長だから最後のHIGH-VALUEまで書き換えられる可能性 が低かったのでしょうか? そこが疑問です。 CではEOFというものがあったと思うのですが、 それの代わりなのでしょうか?