• ベストアンサー

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

  • COBOLのCALL文について

    普段ほとんどCOBOLには触らないCOBOL初心者です。暇つぶしに業務のCOBOLソースを読んでいたら下記のような記述があったのですが、REFERENCEとVALUEが何を意味しているのかよくわかりません。 CALL "abc" USING AAA REFERENCE BBB VALUE CCC http://www.tsh-world.co.jp/sp/support/manual/V701html/gtman3/gt3_163.htm 上のサイトなどで調べたところ、CALL文にはBY REFERENCEやBY VALUEなどが続く事があるようですが、それとは微妙に異なる気がします。それはBY REFERENCEは参照渡し、BY VALUEは値渡しを指定しているという認識ですので、2つを同時に指定するのはありえないという考えからです(BYの記述がないのも気になりますが)。 何かわかる方おりましたらご教示お願いします。 情報が足りなければ、その旨書いて頂ければ補足いたします。(といっても手元にソースがなかったり)

  • COBOLの考え方からJavaへ

    今までIBMホスト畑で働いていたので、使用できる言語は COBOLやPL/Iだけでしたが、今後の仕事の展開も考え Javaを習得したいと思っています。 とりあえずJava言語の入門書を終えたので、 次は、以前新人のCOBOL研修用に作成した仕様書を Javaで書きかえてみようと思いたったのですが・・・ できませんでした。。。 COBOLは、MAINルーチンをプログラムの主とし 個々の機能(FILEのREAD処理など)をそれぞれの SUBルーチンで記述するといった構造的な作りになっています。 これをJavaにすると「FileのREAD処理」を1つのクラスとして考え、 「MAINルーチン的」な実行クラスから 「FileのREAD処理」クラスを呼ぶ(継承する)のか? オブジェクト指向とは、もっと別のことではないか? といったように、全然ちんぷんかんぷんな状況です。 みなさん、Javaでプログラムを記述するときは どういったアルゴリズムを考えながら記述しているのでしょうか? 是非ともご教授ください。 また、COBOLには、誰がソースをみてもわかりやすいように 記述するなどの暗黙的な決まり(ネストは3回程度など)があるのですが、 Javaにもあるのでしょうか?

    • ベストアンサー
    • Java
  • COBOLとCの変数定義

    いつもお世話になってます。 今回は、COBOLとC言語の変数定義の事で質問させていただきます。 以下のCOBOLの変数定義をC言語で記述するとどのようになるでしょうか? 01 wkarea. 05 wk-code. pic s9(03) comp. 05 wk-err-code. 10 filler. pic x(01) value '0'. 10 wk-err-code-9 pic 9(05) 412. 05 wk-err-mdl. 10 filler pic x(01) value '0'. 10 wk-err-mdl-9 pic 9(40) value space. 05 wk-e-code 10 filler pic x(01) value 'A'. 10 filler pic x(01) value 'B'. 10 wl-id pic x(02). 10 wk-no pic 9(03) value xero 10 wk-level pic x(01) value low-value. ちょっと手間かも分かりませんが、どなたか詳しい方いらっしゃいましたら、お答え頂けると有難いです。 よろしくお願いします。 .

  • SQLをcobolに記述することでのエラー

    NetCOBOLでSQLを埋め込んだプログラムを作成しています。 その中でどうしてもうまくいかないのが、短いSQLをCOBOLに記述すると、コンパイル(プレコンパイル→コンパイル→.dll)は通るのですが、実行の際にプログラムが見つからない旨のエラーが出てしまっています。 ソースを色々いじって分かったのは SQLを実行しなくてもソース内に記述するだけで実行エラーとなる。ということです。 コンパイルの時点で何かオプションが必要なのか、SQLが内部的にcallしているモノが何かおかしいのか、幾らか思い当たる部分はあるもののどうしていいかは全くわからずです。 どなたか似た経験ある方や、おもいあたる節のある方いらっしゃいましたら、どんな些細な事でもいいのでご教示願います。

  • 汎用機のCOBOLのソース上でUNICODEのカンマを設定したい

    汎用機のCOBOLを使用しています。今回、ソース上でUNICODEのカンマを設定する必要がでてきたのですが、どのように設定していいかわかりません。。。 処理をしたデータをバイナリで(文字コードを変換しないで)転送する必要があり、かつデータの受け取り側がカンマをUNICODEでと指定してきているため、(COBOL上でカンマを打っても、汎用機の英数字コード(EBCDIK)になってしまいますので)どうしてもCOBOL上でUNICODEのカンマをしなければなりません。 UNICODEでのカンマはコードが「U+002C」ということなのですが、どのように設定すればUNICODEでカンマと認識されるのでしょうか? とりあえず、下記のような項目をつくってデータをつくってみたのですが・・・ 01 X-COMMA PIC X(02) VALUE X'002C' データの受け取り側がこのコードをカンマと判断してくれませんでした・・・ コードはU+002Cとなっているのでそのとおりに設定したかったのですが、「+」が設定できないため、上記のような書き方としました。 何かぜんぜん別の書き方をするのでしょうか? 質問の内容がわかりづらく申し訳ありませんが、どなたか知恵を貸していただければと思います。 よろしくお願いします。

  • COBOLのHIGH-VALUEについて質問!

    仕事で現行のシステムがCOBOLのプログラムを触る機会が出来たのですが COBOLを触った事がないので教えて下さい!>< ファイル読み込み後の処理でHIGH-VALUEを使って比較をしているのですが HIGH-VALUEが何を示しているのかがいまいちわかりません ↓↓↓プログラム一部↓↓↓ READA.    READ LINE AT END GO TO ENDA.    IF KUBUN = HIGH-VALUE GO TO READA. ↑↑↑↑↑↑↑↑↑↑↑↑↑ IFでHIGH-VALUEと比較しているKUBUNの属性はXです。 よろしくお願いします><

  • Excel,Accessの他言語からの起動について

    Cobolのような従来の事務言語の処理中にExcelやAccessといった簡易言語を起動させデータを受け渡す場合CSVで結果を出力して受け渡すことは、簡単にできます。しかし出力結果を自動でExcelやAccessに取り込ませて結果を出力させる場合には、特別な処理が必要だと思いますが、そのような事務処理言語での記述例や記述の仕方について教えてください。汎用機では半角(1バイト系)と全角(2バイト系)はシフトコードを挟み区別させています。また文字サイズをプログラム中でします。しかしExcel等では出力時に任意に文字サイズを指定できます。そのような事を汎用機でいうJCLの記述のような仕方でPCでできるのか。できるとすればどのように記述すればよいのかを例示しているサイトなどをご存じでしたらご教示ください。よろしくお願いします。

  • COBOL 1:1のマッチングについて

    こんばんは。プログラム作成が行き詰ってしまったので、 アドバイス頂けると幸いです。 要件:マスタから名前を検索する 出力番号、名前、合計点の3つ 【マスタファイル】 生徒番号  名前 (数字3桁) (全角6文字)   ・       ・   ・       ・   ・       ・ 【トランザクションファイル】 生徒番号   合計点 (数字3桁)  (数字3桁)   ・       ・    ・       ・ 【出力ファイル】 生徒番号 氏名 合計点 001 ○○  □□ DATA DIVISION. FILE SECTION. FD INFILEM. 01 INRECM. 05 IM-ID PIC X(03). 05 IM-NAME PIC X(12). FD INFILET. 01 INRECT. 05 IT-ID PIC X(03). 05 IT-GOUKEI PIC 9(03). FD OUTFILE. 01 OUTREC. 05 O-ID PIC X(03). 05 O-NAME PIC X(12). 05 O-GOUKEI PIC ZZ9. WORKING-STORAGE SECTION. 01 WM-ID PIC X(03). 01 WT-ID PIC X(03). 01 W-GOUKEI PIC 9(03). PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL WM-ID = HIGH-VALUE AND WT-ID = HIGH-VALUE PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILEM INFILET OUTPUT OUTFILE MOVE SPACE TO WM-ID MOVE SPACE TO WT-ID READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. MAE-SHORI-EXIT. EXIT. SHU-SHORI. IF WM-ID = WT-ID THEN PERFORM KOUSHIN THRU KOUSHIN-EXIT ELSE IF WM-ID < WT-ID THEN PERFORM SHUTURYOKU THRU SHUTURYOKU-EXIT ELSE PERFORM ERRORS THRU ERRORS-EXIT END-IF END-IF. SHU-SHORI-EXIT. EXIT. KOUSHIN. MOVE IT-GOUKEI TO W-GOUKEI MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. KOUSHIN-EXIT. EXIT. SHUTURYOKU. MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF. SHUTURYOKU-EXIT. EXIT. ERRORS. DISPLAY "** ERROR ** IM-ID=" IM-ID " IT-ID=" IT-ID READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. ERRORS-EXIT. EXIT. ATO-SHORI. CLOSE INFILEM INFILET OUTFILE. ATO-SHORI-EXIT. EXIT. 上記のソースで実行すると 番号 名前 2桁の謎の数字が1レコードとしてでてきてしまいます。 詳しい方、ご教示くださいませ。

  • cobolのコントロールブレイク

    趣味の一環としてcobolのファイル入出力プログラムを勉強しているのですが、 リング構造を利用したコントロールブレイク機能の実装で躓いてしまいました。 知恵をお貸しいただければ幸いです。 ソースコードここから IDENTIFICATION DIVISION. PROGRAM-ID. BREAKDV1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INF ASSIGN TO "C:\cobol\sample.cbl" STATUS FST. SELECT OUF ASSIGN TO "C:\cobol\data.txt". DATA DIVISION. FILE SECTION. FD INF. 01 F1R PIC X(72). WORKING-STORAGE SECTION. 01 INKEY PIC 9(01). 01 SAVKEY PIC 9(01). 01 FST PIC X(02). PROCEDURE DIVISION. ACCEPT INF OPEN INPUT INF OUTPUT OUF PERFORM 読込処理 THRU 読込出口 PERFORM UNTIL INKEY = HIGH-VALUE MOVE SAVKEY TO INKEY PERFORM UNTIL INKEY NOT = SAVKEY PERFORM 同一処理 THRU 同一出口 PERFORM 読込処理 THRU 読込出口 END-PERFORM PERFORM 合計処理 THRU 合計出口 END-PERFORM PERFORM 総計処理 THRU 総計出口 CLOSE INF OUF STOP RUN. 同一処理. DISPLAY "SAME" WRITE F1R DISPLAY F1R 同一出口. EXIT. 合計処理. DISPLAY "TOTAL" 合計出口. EXIT. 総計処理. DISPLAY "END" 総計出口. EXIT. 読込処理. PERFORM UNTIL FST NOT "00" READ INF END MOVE HIGH-VALUE TO INKEY NOT END CONTINUE END-READ END-PERFORM 読込出口. EXIT. ソースコードここまで(処理内容は仮のものです) 参考文献ではこのような組み方でよいはずなのですが、コンパイルした際に BREAKDV1.cbl:19: Error: syntax error, unexpected "end of file" とエラーが発生してしまいました。 このエラーを解消する方法をお教え下さい。 開発環境: Windows7SP1+MinGW32、サクラエディタ

  • VC++の初級解説サイトを教えてください。

    度々お世話になります。 今度、VC++での開発を任されました。 しかし、いままでVBやCOBOLなどの言語しか 経験が無く、VC++の型や構文すら分かりません。 VC++でなくてもC++でも構わないので 「猿でも分かる」的な超初心者向け解説サイトは ありませんでしょうか? ご存知でしたらご教示ください。よろしくお願い致します。