- ベストアンサー
COBOLのデータフォーマットとSEARCHについての疑問
- COBOLのプログラムでデータフォーマットがOCCURS(300 TIMES)の項目に40 TIMESデータを格納し、41個目には改行コードが入っているが、displayで見ると空白が入っている理由について質問します。
- COBOLのSEARCH文に関して、データ項目が100回入ることができるが、40回しか格納されていない場合、AT ENDが発生するのかどうかについて質問します。
- 以上がCOBOLのデータフォーマットとSEARCHに関しての疑問です。
- みんなの回答 (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になる」というのは全く違います。 相当、本筋から離れているようですので、こういう サイトではなく、人対人で基礎的なことをしっかり 習うべきです。
その他の回答 (2)
- maiko0318
- ベストアンサー率21% (1483/6969)
1)40バイトのデータを読み、以降は空白が入ります。 改行コードはこれでデータが終わりということを示しているだけなので、 データとしては入力されません。
お礼
なるほど、そういうことでしたか ありがとうございます。
- notnot
- ベストアンサー率47% (4901/10362)
(1) 説明が不足していて、何とも回答しようが無いです。 もう少しちゃんと説明して下さい。どう説明していいかわからないのなら、プログラムをそのまま書いてください。 (2) 入れる?入れ終わる?? SEARCH は検索する命令ですよ。 100個の配列を全部検索し終わっても見つからないときにAT ENDの部分を実行します。
補足
1) 会社の研修で使われてるプログラムなんで ここに記載するわけにはいきません。申し訳ない ちょっと考えますね 2) よくわかりました。ありがとうございます。
お礼
ありがとうございました。