質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
COBOL

COBOL(COmmon Business Oriented Langage)は、実務処理用に開発されたプログラミング言語です。

Q&A

解決済

1回答

952閲覧

COBOL PERFORM文の処理の流れについて

SYOSINSYA

総合スコア1

COBOL

COBOL(COmmon Business Oriented Langage)は、実務処理用に開発されたプログラミング言語です。

0グッド

0クリップ

投稿2023/01/30 04:25

前提

最近COBOLを勉強し始めましたプログラミング初心者の事務職です。
COBOL PERFORM文の処理の流れについて3点、質問します。

実現したいこと

<< 実行例 >>を確認ください。

*PERFORM 入力処理. >1.
で入力処理を呼び出しまず。
入力ファイルの読み込みが終わったので、
終了フラグに 1 を代入しています。

質問①
この時点で 終了フラグ = '1' ですよね?

**質問② **
PERFORM UNTIL 終了フラグ = '1' >2.
終了フラグ = '1'  になるまで>3.出力処理と>4.入力処理を繰り返せとのことですが、
既に
>1.の時点で 終了フラグ = '1' なので 

3.出力処理と>4.入力処理 へは行かずに、END-PERFORM. になりませんか?

質問③
PERFORM 入力処理 >4.
この
>4.の処理は何のためにあるのですか?
既に PERFORM 入力処理. *>1. で入力ファイルの読み込みが終わって
終了フラグ = '1' を代入しています。
*>4.で再度 終了フラグ = '1' を代入する必要がありますか?

処理の流れが良くわからず、質問させていただきます。

COBOL

1 2 3<< 実行例 >> 4 主処理. 5 OPEN INPUT 入力ファイル 6 OUTPUT 出力ファイル. 7 PERFORM 入力処理. *>1. 8 PERFORM UNTIL 終了フラグ = '1' *>2. 9 PERFORM 出力処理 *>3. 10 PERFORM 入力処理 *>4. 11 END-PERFORM. 12 CLOSE 入力ファイル 13 出力ファイル. 14 STOP RUN. 15 入力処理 SECTION. 16 READ 入力ファイル 17 AT END MOVE '1' TO 終了フラグ *>5. 18 END-READ. 19 出力処理 SECTION. 20 MOVE 入力レコード TO 出力レコード. *>6. 21 WRITE 出力レコード. 22 231.入力処理を呼び出します。 242.うちPERFORMで3.,4.をファイル終了条件が成立するまで繰り返します。 253.出力処理を呼び出します。 264.入力処理を呼び出します。 275.入力処理を実行します。 286.出力処理を実行します。 29 30<< 実行例 ここまで >> 31

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2023/01/30 05:29

基本的なPERFORMの構文は、「PERFORM [手続き名]」だと思います。 以下は「手続き名」の指定がありませんが、正しいですか? > PERFORM UNTIL 終了フラグ = '1' *>2.
SYOSINSYA

2023/01/30 06:03

sazi様 コメントありがとうございます。 https://itpfdoc.hitachi.co.jp/manuals/3020/30203D6240/USR20073.HTM 上記URLの 「(c) 手続きを呼び出す場合(そとPERFORM)」 からコピペした例題になります。 出力処理と出力処理にかかっているのかなと思ってました。 PERFORM UNTIL 終了フラグ = '1'   PERFORM 出力処理   PERFORM 入力処理  
guest

回答1

0

ベストアンサー

質問①
この時点で 終了フラグ = '1' ですよね?

いいえ。'1'になるのは、AT END になった時(ファイルの末尾で読むデータが無かった時)だけです。
最初から空のファイルでなければデータがあるので、その時点ではAT ENDではないです。
もしかして、READ命令の意味を理解していないのであれば、復習しましょう。

質問②③も上記を理解すれば自明かと思います。

投稿2023/01/30 10:12

otn

総合スコア85927

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SYOSINSYA

2023/01/31 01:44

otnさま、回答ありがとうございます。 おっしゃる通りREAD命令を理解しておりませんでした。復習して流れがわかりました。 また質問させていただくかもしれませんが、懲りずに教えていただけるとうれしいです。
otn

2023/01/31 07:05

質問文のようなことを考えたにもかかわらず、「これは自分のREADの理解が間違っているからでは無いか?」という方向に発想が行かないというのは、「自分には間違いが無い」と思い込む初心者あるあるです。 (類似例:「書いてある通りにやったのにうまく行かない」) 「自分のどこが間違っているのだろう?」という発想が自然に出てくるようになれば中上級者が見えてきます。
SYOSINSYA

2023/02/24 01:29

otnさま、コメント気がつかず失礼いたいました。ほんとにおっしゃる通りですね。 今後も精進いたしますのでよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問