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

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

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

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

Q&A

0回答

413閲覧

COBOL アンケート集計

Risty_kkk

総合スコア36

COBOL

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

0グッド

0クリップ

投稿2022/05/16 13:04

解決したいこと

COBOLにてアンケートプログラムを作成しているのですが、集計結果を上手く出力することが出来ないです。

問題

設問の数は1~10問で可変、回答の選択肢は1~5の間で可変。
処理するアンケートによって、設問数、選択肢数はパラメタファイルで設定できる。

また、集計元結果ファイルの先頭1行はヘッダ行となり、対応するパラメタIDが設定される。ヘッダ行のパラメタIDとパラメタのパラメタIDが相違する場合はエラー終了させる。

同様に、集計元結果ファイルの最終行にはそのファイルのデータレコードの件数が設定される。この件数とファイルのデータレコード数が不一致である場合はエラー終了させる。

私が考えていること

箱の初期化
ファイルを開く
1行目読み込む
2行目読み込む
ヘッダIDとパラメタIDが相違しているなら終了
(GO TO で、終了)
ファイルを読み込む

主処理
データ区分が2なら
ループ
入力データを足す→計算結果格納する箱がいる
1行読む
ループ
データ区分が2でないなら、
件数とファイルのデータレコード数が不一致である場合はエラー終了させる。

終了処理
結果を出力する
ファイルを閉じる
ディスプレイに表示
終わる

入力ファイル

1JP000001
200001,00101,00001,0000,10000,10000,10000,10000,10000,10000
200001,00101,00001,0000,10000,10000,10000,10000,10000,10000
200001,00101,00001,0000,10000,10000,10000,10000,10000,10000
200001,00101,00001,0000,10000,10000,10000,10000,10000,10000
200001,00101,00001,0000,10000,10000,10000,10000,10000,10000
900005

パラメタファイル

JP000001,06,01

出力ファイルで出力したい形

例)設問1選択肢1件数5

************************************************************ * 例題プログラム * ank3 ************************************************************ * 見出し部 ************************************************************ IDENTIFICATION DIVISION. PROGRAM-ID. ank3. ************************************************************ * 環境部 ************************************************************ ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. * 入力ファイル SELECT 入力ファイル ASSIGN TO syukeimoto ORGANIZATION IS LINE SEQUENTIAL. * パラメタファイル SELECT パラメタファイル ASSIGN TO parameta ORGANIZATION IS LINE SEQUENTIAL. * 出力ファイル SELECT 出力ファイル ASSIGN TO syukeiresult ORGANIZATION IS LINE SEQUENTIAL. ************************************************************ * データ部 ************************************************************ DATA DIVISION. FILE SECTION. * 入力ファイルのレイアウト定義 FD 入力ファイル. 01 ヘッダ. 03 ヘッダ区分 PIC 9(1). 03 ヘッダID PIC X(08). 01 データ. 03 データ区分 PIC 9(1). 03 データ設問 OCCURS 10. 05 データー選択肢 OCCURS 5. 07 入力ー結果 PIC 9(01). 05 FILLER PIC 9(01). 01 トレーラ. 03 トレーラ区分 PIC 9(1). 03 トレーラーデータ件数 PIC X(05). *----------------------------------------------------------- * パラメタファイルのレイアウト定義 FD パラメタファイル. 01 パラメタ. 03 パラメタID PIC X(08). 03 FILLER PIC 9(01). 03 設問 PIC 9(02). 03 FILLER PIC 9(01). 03 選択肢 PIC 9(01). *----------------------------------------------------------- * 出力ファイルのレイアウト定義 FD 出力ファイル. 01 出力. 03 出力ー設問 PIC 9(02). 03 出力ー選択肢 PIC 9(01). 03 出力ー件数 PIC 9(02). *----------------------------------------------------------- *作業領域の定義 WORKING-STORAGE SECTION. 01 W定数. 03 W定数ー終了 PIC 9(02) VALUE 1. 01 W表示. 03 W表示ー終了 PIC 9(02). 03 W表示ー終了2 PIC 9(02). 01 W計算. 03 W計算ー設問 OCCURS 10. 05 W計算ー回答 OCCURS 5. 07 W計算ー箱 PIC 9(02). 01 W色々. 03 WIXーx PIC 9(02). 03 WIXーy PIC 9(02). 03 WIX-入力件数 PIC 9(02). ************************************************************ * 手続き部 ************************************************************ PROCEDURE DIVISION. メインコントロール SECTION. メインコントロールS. ************************************************************ * メインコントロール ************************************************************ PERFORM 初期処理 * PERFORM 主処理 UNTIL W表示ー終了 = W定数ー終了 * PERFORM 終了処理 . メインコントロールE. STOP RUN. 初期処理 SECTION. 初期処理S. ************************************************************ * 初期処理 ************************************************************ * 作業領域の初期化 INITIALIZE W表示. INITIALIZE W色々. * ファイルのオープン OPEN INPUT 入力ファイル. OPEN INPUT パラメタファイル. OPEN OUTPUT 出力ファイル. * 入力データの読み込み PERFORM ファイル読み込み PERFORM パラメタ読み込み * 相違エラー IF ヘッダID NOT = パラメタID THEN DISPLAY "エラー" UPON CONSOLE GO TO メインコントロールE END-IF PERFORM ファイル読み込み . 初期処理E. EXIT. 主処理 SECTION. 主処理S. ************************************************************ * 主処理 ************************************************************ *集計 IF データ区分 = 2 THEN PERFORM UNTIL WIXーx = 設問 COMPUTE WIXーx = WIXーx + 1 PERFORM UNTIL WIXーy = 選択肢 COMPUTE WIXーy = WIXーy + 1 IF 入力ー結果(WIXーx ,WIXーy) = 1 THEN COMPUTE W計算ー箱 (WIXーx ,WIXーy) = W計算ー箱(WIXーx ,WIXーy) + 1 END-IF END-PERFORM INITIALIZE WIXーy END-PERFORM INITIALIZE WIXーx END-IF * 入力データの読み込み PERFORM ファイル読み込み . 主処理E. EXIT. 終了処理 SECTION. 終了処理S. ************************************************************ * 終了処理 ************************************************************ * 出力ファイルの編集 PERFORM UNTIL WIXーx = 設問 COMPUTE WIXーx = WIXーx + 1 PERFORM UNTIL WIXーy = 選択肢 COMPUTE WIXーy = WIXーy + 1 PERFORM 書き込み END-PERFORM INITIALIZE WIXーy END-PERFORM . * 出力ファイルの編集 CLOSE 入力ファイル CLOSE パラメタファイル CLOSE 出力ファイル . 終了処理E. EXIT. ヘッダ9 SECTION. ヘッダ9S. ************************************************************ * ヘッダ9 ************************************************************ IF WIX-入力件数 NOT = トレーラーデータ件数 DISPLAY "入力件数が正しくありません" UPON CONSOLE CLOSE 入力ファイル CLOSE パラメタファイル CLOSE 出力ファイル STOP RUN END-IF . 終了処理E. EXIT. ファイル読み込み SECTION. ファイル読み込みS. ************************************************************ * ファイル読み込み ************************************************************ READ 入力ファイル AT END MOVE 1 TO W表示ー終了 NOT AT END COMPUTE WIX-入力件数 = WIX-入力件数 + 1 END-READ . ファイル読み込みE. EXIT. パラメタ読み込み SECTION. パラメタ読み込みS. ************************************************************ * パラメタ読み込み ************************************************************ READ パラメタファイル AT END MOVE 1 TO W表示ー終了2 NOT AT END CONTINUE END-READ . ファイル読み込みE. EXIT. 書き込み SECTION. 書き込みS. ************************************************************ * 書き込み ************************************************************ MOVE WIXーx TO 出力ー設問 MOVE WIXーy TO 出力ー選択肢 MOVE W計算ー箱(WIXーx,WIXーy) TO 出力ー件数 WRITE 出力 . 書き込みE. EXIT.

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

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

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

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

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

Orlofsky

2022/05/16 21:55

>https://qiita.com/zard0308/questions/bdd3da3cb4065c2060d3 404Not Found お探しのページは一時的にアクセスができない状況にあるか、移動もしくは削除された可能性があります。 また、URL、ファイル名にタイプミスがないか再度ご確認ください。
Orlofsky

2022/05/17 05:50

人に見てもらうなら、見易さを考えては? どの言語もそうだけど、意味のある字下げをする。 COBOLは接頭語を統一してどのファイルやワークの項目かわかるように。
Orlofsky

2022/05/17 07:41

あと、プログラミングの初歩だけど、 英数字をマルチバイト文字で書くのは止めましょう。見る気がしないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問