• ベストアンサー

COBOL等でのHIGH_VALUEについて

noname#109588の回答

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文字の配列を 確保しなければならないということでしょうか?

関連する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++でも構わないので 「猿でも分かる」的な超初心者向け解説サイトは ありませんでしょうか? ご存知でしたらご教示ください。よろしくお願い致します。