COBOLのデータフォーマットとSEARCHについての疑問

このQ&Aのポイント
  • COBOLのプログラムでデータフォーマットがOCCURS(300 TIMES)の項目に40 TIMESデータを格納し、41個目には改行コードが入っているが、displayで見ると空白が入っている理由について質問します。
  • COBOLのSEARCH文に関して、データ項目が100回入ることができるが、40回しか格納されていない場合、AT ENDが発生するのかどうかについて質問します。
  • 以上がCOBOLのデータフォーマットとSEARCHに関しての疑問です。
回答を見る
  • ベストアンサー

COBOL

こんにちわ、IT企業の新卒ではありませんが研修生です。 COBOLの勉強をしています。以下の内容についてご質問させていただきます。 (1)データフォーマットがOCCURS(300 TIMES)のデータ項目に40 TIMESデータを格納し、 41個目には改行コード(ODOA)が入っているプログラムがあるのですが、 実際に41個目をdisplayで見てみると空白が入っていました。ファイルの方には確かに改行コードがちゃんと入っています。 これはどうしてこうなるのでしょうか? (2)SEARCHに関して SEARCH TBL AT END 処理1 というようなプログラムがあります。 TBLは 01 TBL 02 DATA OCCURES 100 INDEXED BY NO     03・・・ 03・・・ というようなフォーマットになってます。 このときAT ENDというのは例えば(1)のときのようなデータとしては 100TIMES入れれるが、40TIMESしか格納しない場合は41個目にAT ENDになるのでしょうか? それとも100回全部入れ終わった時のみAT ENDになるのでしょうか? お手数ですが以上よろしくお願い致します。

  • zaqwe
  • お礼率15% (19/123)

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

かなりハズレです。 >データフォーマットがOCCURS(300 OCCURSの先が分かりません。 PIC X(1)の項目を300回繰り返すのと、 PIC X(2)の項目を300回繰り返すのでは サイズが全然違いますよね。 また、データサイズをフォーマットとは 呼びませんし・・・ まぁ、推測で申し上げます。仮に、下記の データ構造だとします。 02 DATA OCCURS 300.   03 AAA PIC X(2). これは2文字×300で、600文字分の 領域があると言うことです。ファイルを 読み込む前から存在する静的なメモリ 空間です。 >改行コード(ODOA) 違います。復帰(0D)と改行(0A)の2文字です。 あなたが「41個目」と言っているのはファイルの 先頭から41文字目である場合、上記は2文字で 一つの集団項目(02 DATA のこと)を構成する ので、DATA(21)のところが41バイト目です。 (2)SEARCH AT END とは「見つからなかった時」ということ です。SEARCHにはWHEN句があり、一致する 条件を記述しますが、該当データがないない 場合にAT END句の文が実行されます。 ですから、「40TIMESしか格納しない場合は41 個目にAT ENDになる」というのは全く違います。 相当、本筋から離れているようですので、こういう サイトではなく、人対人で基礎的なことをしっかり 習うべきです。

zaqwe
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

1)40バイトのデータを読み、以降は空白が入ります。   改行コードはこれでデータが終わりということを示しているだけなので、   データとしては入力されません。

zaqwe
質問者

お礼

なるほど、そういうことでしたか ありがとうございます。

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

(1) 説明が不足していて、何とも回答しようが無いです。 もう少しちゃんと説明して下さい。どう説明していいかわからないのなら、プログラムをそのまま書いてください。 (2) 入れる?入れ終わる?? SEARCH は検索する命令ですよ。 100個の配列を全部検索し終わっても見つからないときにAT ENDの部分を実行します。

zaqwe
質問者

補足

1) 会社の研修で使われてるプログラムなんで ここに記載するわけにはいきません。申し訳ない ちょっと考えますね 2) よくわかりました。ありがとうございます。

関連するQ&A

  • COBOLについて

    今高校でCOBOLの勉強をしています。 教科書の練習問題が宿題に出されたのですが、わからないところがありました。 (1)数字項目2桁、テーブル名SUUJI-TBL、データ名SUUJI、要素数20個のテーブルを確保しなさい。 (2)手続き部で、(1)で確保したテーブルに、先頭から1,3,5・・・の値を転記しなさい。ただし、PERFORM文を用いること。 という問題です。 (1)は、 01 SUUJI-TBL.   02 SUUJI PIC X(2) OCCURS 20. と書けたのですが、(2)がさっぱりわかりません。 わかる方、教えてもらえますか?

  • 2次元配列について

    VB6.0で開発しています。 以前COBOLをしていて、VBではどのように定義するかがわからなかったので質問します! ----------- COBOL ----------------- 01 TBL-AREA. 03 TBL OCCURS 6. 05 TBL-IX OCCURS 16. 07 TBL-IX PIC 9(07). 07 TBL-NAME PIC N(20). と定義した場合はVBではどのように記述するのですか? Public Type TBL_AREA TBL_TEXT As Integer TBL_Caption As String End Type Public TBLArray() As TBL_AREA ReDim TBLArray(6,16) と記述してみたものはいいものの、処理の記述方法がわかりません(恥)

  • COBOLでのランダムアクセス

    すみませんCOBOL初心者です。 FILE-CONTROL. SELECT URIAGE-MOKUHYOU ASSIGN TO "c:\dat\mokuhyou.dat" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS UM-SHITEN-CODE. DATA DIVISION.   FILE SECTION.   FD URIAGE-MOKUHYOU.   01 UM-REC.    05 UM-SHITEN.     10 UM-SHITEN-CODE PIC X(4).     10 UM-SHITEN-MEI PIC X(20).    05 UM-KINGAKU PIC 9(10) OCCURS 12. WORKING-STORAGE SECTION.   01 TSUKI PIC 9(2).   01 WK-SHITEN-CODE PIC X(4). PROCEDURE DIVISION.   DISPLAY "支店コードを入力してください --> : "   ACCEPT WK-SHITEN-CODE   OPEN INPUT URIAGE-MOKUHYOU   READ URIAGE-MOKUHYOU    INVALID KEY     DISPLAY "ERROR; 支店コード = " WK-SHITEN-CODE    NOT INVALID KEY     DISPLAY WK-SHITEN-CODE " の売上げ目標は " UM-REC   END-READ.   STOP RUN. というプログラムを作成し、"mokuhyou.dat"という入力ファイルに正しくデータが格納されているのですが、コンパイルは問題なく、実行すると、 JMP0310I-U OPEN ERROR FILE=mokuhyou.dat. 'ACC-METHOD'. PGM=TEST046 ADR=00401258 とまず画面にでて、OKを押すと、 JMP0099I-U FORCED TERMINATION CODE=0310 というエラーになります。 おそらくファイルが正常に読み込めないものと推測されますが、解決法を教えてください。お願いします。

  • COBOL

    COBOLを使ってこんなプログラムを作りたいです トランザクションファイルに店コード 売り上げ (01 100万  01 100万  01 100万  02 120万  04 140万)などが入っている マスターファイルに店コード 店名が入っている (01 大阪店  02 名古屋店  03 札幌店  04 東京店)など この2つのファイルを使って以下のファイルを出力する方法を教えてください。 出力ファイル 店名 売り上げ (大阪店 100万円  大阪店 100万円  大阪店 100万円) 注意:出力ファイルには、一致するコードをすべて 出力するのではなく、01の大阪店のみをすべて出力したいです。 ●SERCHを使いたいです ~~~~~~~~~~~~~~~~~ SET IDX 1 SERCH □□□ AT END エラー処理 WHEN ○○○=△△△(IDX) これは、2つのファイルが一致するすべてを出力してしまいます。 求めたいのは、一部のコード(01)のときだけです。 どうすればいいですか? 前提として、トランザクションファイルをすべて読み込みます。 マスターファイルは、テーブルにすべて読み込みます。 ~~~~~~~~~~~~~ 自分の見解 SERCHをやってトランザクションファイルとマスターファイルとが一致するのを探して一致する場合、さらに01か判断するような感じになると思うんですが・・・ 実際に簡単にプログラムを書いていただけるとうれしいです。

  • COBOLのプログラムで・・。

    現在COBOLプログラムを作ってまして以下のプログラムで表示結果が「EQUAL」となるようにしたいのですがどうやったらいいでしょうか?回答のほうよろしくお願いします、以下がプログラムです。 IDENTIFICATION DIVISION. PROGRAM-ID. TEST9. DATA DIVISION. * WORKING-STORAGE SECTION. * 01 GR01. 02 DATA1 PIC N(2). * 01 DATA2 PIC N(2). 02 SPACE TO DATA2 * PROCEDURE DIVISION. * MOVE SPACE TO GR01. * MOVE SPACE TO DATA2. IF DATA1 = DATA2 THEN DISPLAY "EQUAL" ELSE DISPLAY "NOT EQUAL" END-IF. * * STOP RUN. * END PROGRAM TEST9.

  • 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です。 よろしくお願いします><

  • COBOLでこんなプログラムをつくりたいです

    COBOLを使ってこんなプログラムを作りたいです トランザクションファイルに店コード 売り上げ (01 100万  01 100万  01 100万  02 120万  04 140万)などが入っている マスターファイルに店コード 店名が入っている (01 大阪店  02 名古屋店  03 札幌店  04 東京店)など この2つのファイルを使って以下のファイルを出力する方法を教えてください。 出力ファイル 店名 売り上げ (大阪店 100万円  大阪店 100万円  大阪店 100万円) 注意:出力ファイルには、一致するコードをすべて 出力するのではなく、01の大阪店のみをすべて出力したいです。 ●SERCHを使いたいです ~~~~~~~~~~~~~~~~~ SET IDX 1 SERCH □□□ AT END エラー処理 WHEN ○○○=△△△(IDX) これは、2つのファイルが一致するすべてを出力してしまいます。 求めたいのは、一部のコード(01)のときだけです。 どうすればいいですか? 前提として、トランザクションファイルをすべて読み込みます。 マスターファイルは、テーブルにすべて読み込みます。 ~~~~~~~~~~~~~ 自分の見解 SERCHをやってトランザクションファイルとマスターファイルとが一致するのを探して一致する場合、さらに01か判断するような感じになると思うんですが・・・ 実際に簡単にプログラムを書いていただけるとうれしいです。

  • COBOLのプログラムがビルドできません;;

    今年の4月からシステム関係の会社に就職する者です。 就職にあたって会社からの課題としてCOBOLのプログラムを転記して実行するというものが出たのですが、どうしてもビルドエラーになってしまい困っています。 IDENTIFICATION DIVISION. PROGRAM-ID.  KADAI005 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. / DATA DIVISION. FILE SECTION. / WORKING-STORAGE SECTION. 01 W-九九TBL. 03 W-行 OCCURS 9. 05 W-列 OCCURS 9. 07 W-積 PIC 9(02). 01 W-指標1 PIC 9(02). 01 W-指標2 PIC 9(02). 01 W-合計 PIC 9(04). / PROCEDURE DIVISION. メインコントロール        SECTION. メインコントロールS. メインコントロール   PERFORM 初期処理. PERFORM 主処理. PERFORM 終了処理. メインコントロールE. EXIT. 初期処理             SECTION. 初期処理S. ワークエリアの初期化 MOVE ZERO TO W-九九TBL W-合計. 初期処理E. EXIT. 主処理              SECTION. 主処理S. PERFORM VARYING W-行 FROM 1 BY 1 UNTIL W-行 > 9 PERFORM VARYING W-列 FROM 1 BY 1 UNTIL W-列 > 9 COMPUTE W-積(W-行,W-列) = W-行 * W-列      COMPUTE W-合計 = W-合計 + W-行 * W-列    END-PERFORM END-PERFORM. DISPLAY "合計 =" W-合計. DISPLAY "5×4=" W-積(5,4). DISPLAY "2×7=" W-積(2,7). 主処理E. EXIT. 終了処理             SECTION. 終了処理S. プログラム終了 STOP RUN. 終了処理E. EXIT. 提出期限が明日に迫っていて焦っています; 回答よろしくお願いします。

  • COBOL初心者です。

    COBOL初心者です。 プログラミング自体初めて1か月です。 いかんせん本当に初心者なので どう質問したらイイのか分からないんですがヨロシクです。 実行したらなんか固まってしまう?んです。 記述がおかしいんでしょうけど、何がおかしいのか分からなくて… どう書けばイイのか分からないのでソースをそのまま貼り付けます。 IDENTIFICATION DIVISION. PROGRAM-ID. 000. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO "x.txt". DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-REC. 03 X PIC X(10). WORKING STORAGE SECTION. 01 WORK. 03 WK-X PIC X(10). 01 END-FLAG PIC 9 VALUE 0. PROCEDURE DIVISION. MAIN-SEC SECTION. MAIN-010. OPEN INPUT IN-FILE. PERFORM UNTIL END-FLAG = 1 READ IN-FILE AT END MOVE 1 TO END-FLAG NOT AT END MOVE X TO WK-X DISPLAY WK-X END-PERFORM. CLOSE IN-FILE. STOP RUN. MAIN-SEC-END. EXIT. なんしか、"x.txt"を読み込みたいんです。 勉強中なのでとりあえず読み込みたいデータはちっちゃくしました。 うーんどう伝えたらイイんでしょう~ よろしくお願いします。

  • COBOLのプログラミング力を上げるには?

    私は25歳女性、現在COBOLのプログラマーです。 去年の夏2か月ほどCOBOLのプログラミングをした経験がありますが 初めてで全然できず、いろんな上司に手伝ってもらいながらやっとできました (ほぼ他力)。 今月からまたプログラムを作ることになり、ソースは勉強して読めるようになりましたが、「この処理の詳細設計書いて!」と言われても。全く書けません。 どういう処理なのか教えてもらっても、理解するのに他人の10倍は時間が かかります。 あまりにできなくて自信がなくなり、質問しにいくのも恥ずかしく、落ちこんでばかりです。ネットで調べても、本を読んでも、あまり実務につながりません。 上司もなんだか呆れています。 派遣で今の会社にきて1年半、この間ほぼ事務職だった私には、はっきり言ってプログラミングは厳しいです。 新卒の子は一人一人に教育係がいるのですが、私はすべて自分で動かないと何も進みません。 なのに周りは男性ばかりで質問するのが恥ずかしく、一人で考えて煮詰まっちゃいます。 今のプロジェクトでがんばって、評価してもらおうと気合十分だったのですが、 早くも挫折してしまいました。 このままではタイトなスケジュールの中、私が足を引っ張り他のメンバーに 迷惑がかかってしまいます。 勇気を出して質問にいくようがんばりますが、それ以外に どう努力したらいいのでしょうか><。 どうようもないことで質問をしてすみません。 ちなみに今担当している処理は (1)ファイルを読み込む→データを抽出→抽出したデータをファイルに出力 (2)出力ファイルのデータをDBに取り込む 簡単そうでなかなかできません。

専門家に質問してみよう