• ベストアンサー

COBOL等でのHIGH_VALUEについて

いつもいろいろ教えていただきありがとうございます。 先日職場で仕様書に「HIGH_VALUE」という単語がでてきました。 ネットで調べましたがCOBOL由来の技法ということまでしかわかりませんでした。 C言語のソースもありましたが構文的には読めたのですが なにをしているかは理解できませんでした。 どうか教えてください。 また、この技法は汎用機で使われた技法で 現在使うには注意が必要だという記述がありました。 この点についてもご教示いただけたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • LN-TF
  • ベストアンサー率53% (320/596)
回答No.5

既に回答が出ていますように、16進数で’FF’です。 古い富士通のオフコンでは、レコードの先頭が’FF’のものは削除レコードされました。当時のコンパイラでDELETE命令がなく、止むを得ず、MOVE HIGH-VALUE TO レコード名.などとしていた事を思い出します。若しかすると古いコンパイラと互換性をもたせるために、いまだにHIGI-VALEや’FF’をレコードに送りREWRITEしてしまうと当該レコードを削除するようになっているのかもしれません。その場合には注意が必要でしょう。 当該コンパイラの仕様書又はマニュアルなどのどこかに明記してあるはずだとは思いますが・・・。

その他の回答 (4)

noname#147912
noname#147912
回答No.4

0か1みたいに、ただのフラグですよ、あまり気にすることありませんよ

noname#109588
noname#109588
回答No.3

#2です。 またマッチングでも使います。 ファイルを全部読み終えたという意味でキーに最高値であるHIGH-VALUEをセットします。 READ A-FILE AT END MOVE HIGH-VALUE TO A-KEY というように。 AーFILEを全部読み終えた時点でA-KEYの内容が最高値なので マッチングしないというテクニックです。

dindin_001
質問者

補足

回答ありがとうございます。 仕様書ではマッチングに使っていました。 汎用機では固定長だから最後のHIGH-VALUEまで書き換えられる可能性 が低かったのでしょうか? そこが疑問です。 CではEOFというものがあったと思うのですが、 それの代わりなのでしょうか?

noname#109588
noname#109588
回答No.2

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に代入した分だけ出力されるというわけです。

dindin_001
質問者

補足

回答ありがとうございます。 ということは、入力する文字列+1文字の配列を 確保しなければならないということでしょうか?

回答No.1

読んで字のごとく、考えうる最大の値です。 LOW_VALUEはその逆で最小の値です。 注意がどんな注意かわかりませんが、例えば16進で 00 が FF 00 とすると、LOW_VALUEは 00 00 だったと思うのでHIGH_VALUEは 99 99 という値のことになるのかな。 通常16進で99 99というコードは存在しないので文字ではないです。 使い方はSTART命令の前にレコードを位置づけするために先頭のレコード(LOW_VALUE)、もしくは最後尾のレコード(HIGH_VALUE)という意味で使います。

dindin_001
質問者

補足

回答ありがとうございます。 注意は以下のサイトで見かけました。 http://otn.oracle.co.jp/forum/message.jspa?messageID=28003298 asciiだとLOW-VALUE00(NUL)で、 HIGH-VALUEが(対応不明)となるわけですね。 これをフラグとするわけですね。少し分かった気がします。

関連するQ&A