VBA初心者がCOBOLの課題で困っています。お助け下さい。

このQ&Aのポイント
  • VBAの初心者がCOBOLの課題に困っています。解決策を教えてください。
  • 半年のVBA経験しかない初心者がCOBOLの課題で困っています。助けてください。
  • COBOLの課題に取り組む初心者が支援を求めています。お助けください。
回答を見る
  • ベストアンサー

お助け下さい。

初めて書き込みます。どなたかお助け下さい。 まだ入社して半年ほどのVBAを多少勉強した程度の初心者なのですが、上司にCOBOLの課題を出され期限が迫って困っています。お助け下さい。よろしくお願いします。 課題はCOBOLで簡単な住所録を出力させるというもの。参考書やネットで探してみてコーディングしてみたのですが、ここまでしかできませんでした。以下がコーディングしたものです。出来れば本日中か明日には回答を頂きたいです。 環境はWindowsXP、Open cobolで作成しています。 以下の条件に変更、追加したいのです。 (1):10回ループしている部分をUNTILで無限にループさせて、最初の項番に戻った時に値を入力せずにEnterでフラグを立たせて終了。 (2):項番や氏名などの入力で間違って入力した際に、戻って入力し直す。 IDENTIFICATION DIVISION. PROGRAM-ID. kadai2. ENVIRONMENT SETION. FILE-CONTROL. SELECT REN-F ASSIGN TO 'C:任意.DAT' ORGANIZAITION IS LINE SEQUENTIAL FILE STATUS IS REN-ST. DATA DIVISION. FILE SECTION. FD REN-F 01 SYAIN=RAC. 05 KOUBAN PIC X(2). 05 FILLER PIC X(2). 05 SIMEI PIC N(10). 05 FILLER PIC X(2). 05 YUUBIN PIC X(10). 05 FILLER PIC X(2). 05 KEN PIC N(10). 05 FILLER PIC X(2). 05 SIKU PIC N(20). 05 FILLER PIC X(2). 05 TATEMONO PIC N(20). WORKING-STRAGE SECTION. 01 REN-ST PIC XX. PROCEDURE DIVISION. SYU SECTION. INIT. OPEN OUTPUT REN-F. IF REN-ST NOT='00' THEN CONTINUE ELSE PERFORM KAKIKOMI THRU SYUURYO END-IF. PROG-END. STOP RUN. KAKIKOMI. PERFORM 10 TIMES DISPLAY "項番" WITH NO ADVANCING ACCEPT KOUBAN DISPLAY "氏名" WITH NO ADVANCING ACCEPT SIMEI DISPLAY "郵便番号" WITH NO ADVANCING ACCEPT YUUBIN DISPLAY "県名" WITH NO ADVANCING ACCEPT KEN DISPLAY "市町村" WITH NO ADVANCING ACCEPT SIKU DISPLAY "部屋番号" WITH NO ADVANCING ACCEPT TATEMONO WRITE SYAIN-RC END-WRITE END-PERFORM. SYUURYO. CLOSE REN-F 補足と致しまして 上司にはほうれんそうに関しては日報など逐一しています。 相談やアドバイスなども求めました。 事前に設計書なども自分なりに調べて作成し提出しましたが、具体的な指摘をもらえないので修正すべき部分が分からないので困ってます。 こいった所で聞くのは、筋違いだと思いますがよろしくお願いします。

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

  • ベストアンサー
  • RURUFOU
  • ベストアンサー率55% (5/9)
回答No.3

古代のCOBOLERなので Open cobolの仕様は分かりませんが ロジックとコーディングでお手伝いを。 (1):10回ループしている部分を   UNTILで無限にループさせて、   最初の項番に戻った時に値を入力せずに   Enterでフラグを立たせて終了。 10回ループは、PERFORM 1O TIMES なので PERFORM UNTIL 終了条件 の形にします。 項番の入力で終了とするので PERFORM UNITIL KOUBAN = Enter入力 の形にします。 Enterのみ入力で何が入るか分からないので NULLになると想定して PERFORM UNTIL KOUBAN = '' にします。 で PERFORM UNTIL KOUBAN = '' DISPLAY "項番" WITH NO ADVANCING ACCEPT KOUBAN その他の項目入力 DISPLAY "部屋番号" WITH NO ADVANCING ACCEPT TATEMONO WRITE SYAIN-RC END-WRITE END-PERFORM. のままだと、項番でEnter入力後、他の項目も入力して 書き込みを行ってから終了条件を判定するので PERFORMの前に項番の入力を行います。 DISPLAY "項番" WITH NO ADVANCING ACCEPT KOUBAN PERFORM UNTIL KOUBAN = '' その他の項目入力 DISPLAY "部屋番号" WITH NO ADVANCING ACCEPT TATEMONO WRITE SYAIN-RC END-WRITE END-PERFORM. 今度は、項番の入力がループの外にあるので 2回目の項番の入力が行われません。 なので項番の入力をもう一つ書き足して 入力直後に終了判定を行う為に ループの最後に書き足します。 KAKIKOMI. DISPLAY "項番" WITH NO ADVANCING ACCEPT KOUBAN PERFORM UNTIL KOUBAN = '' DISPLAY "氏名" WITH NO ADVANCING ACCEPT SIMEI DISPLAY "郵便番号" WITH NO ADVANCING ACCEPT YUUBIN DISPLAY "県名" WITH NO ADVANCING ACCEPT KEN DISPLAY "市町村" WITH NO ADVANCING ACCEPT SIKU DISPLAY "部屋番号" WITH NO ADVANCING ACCEPT TATEMONO WRITE SYAIN-RC END-WRITE DISPLAY "項番" WITH NO ADVANCING ACCEPT KOUBAN END-PERFORM. (2):項番や氏名などの入力で   間違って入力した際に、戻って入力し直す。 これに関しては、どこに戻るのか、いつ戻るのか、項目はどうやって指定するのかで 書き方も変わってきますし、ここからだと大幅な書き換えになりますので 話しは「仕様を確認」してから、になります。 後、コーディングで 01 SYAIN=RAC に対して WRITE SYAIN-RC となっているので 01 SYAIN-RC WRITE SYAIN-RC にするか 01 SYAIN=RAC WRITE SYAIN=RAC にしてください。 私が手伝える所は、こんなところです。 課題がんばって下さい。

kenzo9567
質問者

お礼

ありがとうございました! 期限に間に合わなかったですが、勉強になりました。 新たに似たような課題が出たので、役立てたいと思います!

その他の回答 (2)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

がんばったけど出来なかったと言うのも一つの結果報告です。 人の手を借りて取り繕って完成させても、それをは実力を偽ることになるので後々で困るのはご本人ですよ。

回答No.1

どこで10回ループしているかわかる? >項番や氏名などの入力で間違って入力した際に 何を持って間違いと判別するの? >こいった所で聞くのは、筋違いだと思いますがよろしくお願いします。 質問サイトだから筋は通ってるけど、今後も同じようなことがあったら質問サイトに頼るの? この業界でやっていこうと思うなら、まずは調べまくりなさい。

関連するQ&A

  • 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のコントロールブレイク

    趣味の一環として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、サクラエディタ

  • 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のCOUNTER

    COBOL初心者です。 COBOL97を使用しています。 人数を入力して、入力した人数の得点を入力、 入力した得点の平均、合計、最大、最小を表示するプログラムを作成しています。 PERFORM文とCOUNTERの指定方法がよくわかりません。 COUNTERは数字でなければならないのでしょうか? どのようにプログラムを書いてよいかわかりません・・・・ どなたかお助け下さい。 お願いします。 01 VAL. 02 VAL PIC 9(4). 01 MAX-VAL PIC 9(4) VALUE ZERO. 01 MIN-VAL PIC 9(4). 01 TOTAL-VAL PIC 9(4). 01 AVERAGE-VAL PIC 9(4). 01 COUNTER PIC 9(1). 01 PEOPLE PIC 9(15). 01 MAX-Disp PIC Z(3)9. 01 TOTAL-Disp PIC Z(3)9. 01 AVERAGE-Disp PIC Z(3)9. 01 MIN-Disp PIC Z(3)9. 01 得点 PIC 9(4). PROCEDURE DIVISION. DISPLAY "人数を入力してください". ACCEPT PEOPLE. DISPLAY PEOPLE "人です". DISPLAY "テストの得点を入力してください". PERFORM TEST BEFORE VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > PEOPLE

  • COBOLで「WORKING-STORAGE SECTION.」と「L

    COBOLで「WORKING-STORAGE SECTION.」と「LINKAGE SECTION.」を 使用して、呼び出そうとしていますが以下のエラーが発生してしまいます。 「line12,column 6:""SAMPLE-02""文法が間違っています。」 です。 どのように文法が間違っているのでしょうか? 以上、よろしくお願いします。 「SAMPLE_01.COB」 ---------------------------------------------- *文字列の表示 IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-01. * ENVIRONMENT DIVISION. * DATA DIVISION. WORKING-STORAGE SECTION. 01 HELLO PIC X(12) VALUE "Hello World!". * PROCEDURE DIVISION. CALL "SAMPLE-02" USING HELLO. STOP RUN. 「SAMPLE_02.COB」 ---------------------------------------------- *項目に値を入れる IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-02. * ENVIRONMENT DIVISION. * DATA DIVISION. LINKAGE SECTION. 01 HELLO PIC X(12). * PROCEDURE DIVISION USING HELLO. DISPLAY HELLO. STOP RUN.

  • 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. ちょっと手間かも分かりませんが、どなたか詳しい方いらっしゃいましたら、お答え頂けると有難いです。 よろしくお願いします。 .

  • 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

    以下のソースに「指定外の数値です。」になったらプログラムを終了するにしたいのです。ソースを教えてください。 IDENTIFICATION DIVISION. PROGRAM-ID. TEST-001. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 W-NUM PIC 9(3). 88 NUM-RANGE VALUE 128 129 130 . PROCEDURE DIVISION. MAIN. DISPLAY "開始(START)". DISPLAY "3桁の数値を入力してください" ACCEPT W-NUM. IF NUM-RANGE THEN DISPLAY "指定の数値です。" ELSE DISPLAY "指定外の数値です。" END-IF. STOP RUN.

  • cobolプログラムをCSV出力しても空白に...

    2度目の質問です。 宜しくお願いします。 COBOLを勉強し始めて間もないのですが、プログラムを何とか参考書を見ながら書いており、 エラーが出なくなったのですが、CSVファイルで出力しても空白になってしまい、原因がわからず困惑しております。 以下、プログラムを記載します。 何が原因がわかる方おりましたらアドバイスをいただけると幸いです。 IDENTIFICATION DIVISION. PROGRAM-ID. REI-01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "C:\COBOL\kamokuUT2.txt" ORGANIZATION LINE SEQUENTIAL. SELECT OUTFILE ASSIGN TO "C:\COBOL\UT2.csv" ORGANIZATION LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INFILE. 01 INREC. 02 I-NUMBER PIC 9(2). 02 I-NAME PIC X(20). 02 I-KAMOKU-SYURUI PIC 9(3). 02 I-KAMOKU-TEN PIC X(3). FD OUTFILE. 01 OUTREC PIC X(32). 01 W-MIDASHI. 02 W-ID PIC X(8) VALUE "社員番号". 02 W-COMMA PIC X(1) VALUE ",". 02 W-NAME PIC X(4) VALUE "名前". 02 W-COMMA PIC X(1) VALUE ",". 02 W-KAMOKU PIC X(4) VALUE "科目". 02 W-COMMA PIC X(1) VALUE ",". 02 W-TEN PIC X(4) VALUE "点数". 02 W-COMMA PIC X(1) VALUE ",". 01 W-MEISAI. 02 O-NUMBER PIC 9(2). 02 O-COMMA PIC X(1) VALUE ",". 02 O-NAME PIC X(20). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-SYURUI PIC 9(3). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-TEN PIC X(3). 02 O-COMMA PIC X(1) VALUE ",". WORKING-STORAGE SECTION. 77 W-FLAG PIC X(1). PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL W-FLAG = "1" PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILE OUTPUT OUTFILE MOVE "0" TO W-FLAG READ INFILE AT END MOVE "1" TO W-FLAG END-READ. MAE-SHORI-EXIT. EXIT. SHU-SHORI. WRITE OUTREC FROM W-MIDASHI. IF I-KAMOKU-TEN >= 70 THEN MOVE I-NUMBER TO O-NUMBER MOVE I-NAME TO O-NAME MOVE I-KAMOKU-SYURUI TO O-KAMOKU-SYURUI MOVE I-KAMOKU-TEN TO O-KAMOKU-TEN WRITE OUTREC FROM W-MEISAI ELSE CONTINUE END-IF. READ INFILE AT END MOVE "1" TO W-FLAG END-READ. SHU-SHORI-EXIT. EXIT. ATO-SHORI. CLOSE INFILE OUTFILE. ATO-SHORI-EXIT. EXIT. 【出力ファイル.csv】の完成系ですが、 ________________ 社員番号 名前 科目 点数 01 ○○ 010 073   ・     ・   ・    ・   ・     ・   ・    ・ ________________ 【入力ファイル.txt】はこのような形です。 ________________ 01あああああいいいいい010070 ________________ ※入力ファイルの得点が70点以上のファイルのみ出力したいのですが・・・ 長文になってしまいましたが宜しくお願いします。

  • 何度もすみません(COBOLプログラミング)

    何度もすみません。 下記のようにプログラムを変更して実行しました。 IDENTIFICATION DIVISION. PROGRAM-ID. REI-01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "C:\COBOL\kamokuUT.txt" ORGANIZATION LINE SEQUENTIAL. SELECT OUTFILE ASSIGN TO "C:\COBOL\UT3.csv" ORGANIZATION LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INFILE. 01 INREC. 02 I-NUMBER PIC 9(2). 02 I-NAME PIC X(20). 02 I-KAMOKU-SYURUI PIC 9(3). 02 I-KAMOKU-TEN PIC X(3). FD OUTFILE. 01 OUTREC. 02 O-NUMBER PIC 9(2). 02 O-COMMA PIC X(1) VALUE ",". 02 O-NAME PIC X(20). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-SYURUI PIC 9(3). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-TEN PIC X(3). WORKING-STORAGE SECTION. 77 W-FLAG PIC X(1). 01 W-MIDASHI. 02 W-ID PIC X(8) VALUE "社員番号". 02 W-COMMA PIC X(1) VALUE ",". 02 W-NAME PIC X(4) VALUE "名前". 02 W-COMMA PIC X(1) VALUE ",". 02 W-KAMOKU PIC X(4) VALUE "科目". 02 W-COMMA PIC X(1) VALUE ",". 02 W-TEN PIC X(4) VALUE "点数". PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL W-FLAG = "1" PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILE OUTPUT OUTFILE MOVE "0" TO W-FLAG READ INFILE AT END MOVE "1" TO W-FLAG END-READ. MAE-SHORI-EXIT. EXIT. SHU-SHORI. WRITE OUTREC FROM W-MIDASHI. IF I-KAMOKU-TEN >= 70 THEN MOVE I-NUMBER TO O-NUMBER MOVE I-NAME TO O-NAME MOVE I-KAMOKU-SYURUI TO O-KAMOKU-SYURUI MOVE I-KAMOKU-TEN TO O-KAMOKU-TEN WRITE OUTREC FROM INREC ELSE CONTINUE END-IF. READ INFILE AT END MOVE "1" TO W-FLAG END-READ. SHU-SHORI-EXIT. EXIT. ATO-SHORI. CLOSE INFILE OUTFILE. ATO-SHORI-EXIT. EXIT. そして、CSVファイルを開くと、 ____________ 社員番号 名前 科目 点数 社員番号 名前 科目 点数 社員番号 名前 科目 点数 ____________ としか表示されませんでした。 入力ファイルは前回のものと同様です・・・ 参考書を基に色々調べてみたのですが、解決できませんでした。。 回答いただけると幸いです。 宜しくお願い致します。