• ベストアンサー

COBOLプログラミングについて

先ほど質問した者です。 記入に少し誤りがありましたので再度質問いたします。 例)  現在の表示状況 6桁の会員番号 123456  以下のように変更 ↓          6桁の会員番号の内下2桁を**で表示する                  1234**  このコーディングの仕方を教えて下さい。  初歩的な質問ですいません。

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

  • ベストアンサー
回答No.4

お疲れ様です。 01 KAIIN-DATA 03 KD-1 PIC N(04) COLUMN 23. ←会員種別 03 KD-2 PIC N(06) ←会員番号 としていますが、 実際データーの入っている項目 (123456)6桁なので WORKでも6桁 持ちたく なりますよね! でも、加工しなければ ならない(1234**) 場合、WORKでの考え方 を替えます。 03 KD-2 PIC N(06) ではなく 03 KD-2. 05 KD-2-4 PIC N(04). 05 KD-2-2 PIC N(02). とし、 move K1-2 to KD-2. move "**" to KD-2-2. とすれば KD-2 の中身は 1234** になります。 発想の転換が必要かも・・・・。 持ってくるデーターが6桁なら 格納する部分も6けた にする必要は有りません。 今回の様に 4桁2桁に分けても いいですし、 ぶっちゃけ 1桁を6個作っても良い訳です。 欲しいケタ数になるまで WORKーSTRAで分散した 箱?を用意してやれば 良いと言う事に・・・・・。 頑張って下さい ^^

moyoyochi
質問者

お礼

6桁と*、N項目にこだわってよくわからなくなっていました。 4桁と2桁に分ければ良かったんですね。 やっと理解できました。 詳細な回答どうもありがとうございました。 大変参考になりました。

moyoyochi
質問者

補足

回答して頂いた方法を参考にコーディングしてみましたが、何度やってもコンパイルがとおりません。 どうしてでしょうか? *をN項目に転記しても問題ないんでしょうか?

その他の回答 (4)

  • LN-TF
  • ベストアンサー率53% (320/596)
回答No.5

横から失礼致します。 回答3ですが、考え方は良いのですが、誤りがあります。 その部分のみ抜書きします。 01 KAIIN-BANGO-X. 03 KAIIN-BANGO PIC 9(6). 03 FILLER REDEFINES KAIIN-BANGO. 03 FILLER PIC X(4). 03 BANGO-MASK PIC X(2). この下2行は「03」ではいけません。「04」「05」等とでないと誤りです。 その辺を見易くするには字下げをすると良いです。 (修正案) 01 KAIIN-BANGO-X.   03 KAIIN-BANGO PIC 9(6). 03 FILLER REDEFINES KAIIN-BANGO. 05 FILLER PIC X(4). 05 BANGO-MASK PIC X(2). もとの儘だとコンパイラによっては再定義している行を無視してコンパイルしてしまいます(警告メッセージは出る筈ですが)。又別のコンパイラによってはエラーとなってコンパイルできません。(この辺コンパイラによって対応が違うようです。)

回答No.3

部分参照が使えるとかで、やり方もいろいろ出てくるのですが。 WORKING-STORAGE SECTION. 01 KAIIN-BANGO-X. 03 KAIIN-BANGO PIC 9(6). 03 FILLER REDEFINES KAIIN-BANGO. 03 FILLER PIC X(4). 03 BANGO-MASK PIC X(2). PROCEDURE DEVISON. MOVE 会員番号 TO KAIIN-BANGO. MOVE '**' TO BANGO-MASK.

moyoyochi
質問者

お礼

早速の回答ありがとうございます。 なるほど、再定義するという方法もあるのですね。 参考になりました。

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

25年ぶりなんで、正確ではないかも知れませんが、参考までに… DATA  DIVISION. 01  HYOUJI.   03  .... 中略   03  KAIIN-GROUP.     05  KAIIN-NO   PIC X(4).     05  FILLER     PIC X(2) VALUE "**". PROCEDURE  DIVISION. * 会員番号の上4桁を転送 MOVE  KAIIN    TO KAIIN-NO. KAIIN は 会員番号で、PIC 9(6)と仮定します。

moyoyochi
質問者

お礼

早速の回答ありがとうございます。 25年ぶりなのにすごいですね。 VALUEで最初に定義づけするという方法もあるんですね。 参考になりました。

回答No.1

workingstarage section で 01 work-area. 03 kain-no. 05 kain-no4 pic 9(4). 05 kain-no2 pic x(2). 03 kain-noato. 05 kain-noato4 pic9(4). 05 kain-noato2 picx(2). procedur section で move aaa to kain-no. move kain-no4 to kain-noato4. move "**" to kain-noato2. aaaはファイルセクションで6桁番号 (123456)の入っている部分に 当たる所。 なのでkain-noato の中身は1234** になります。

moyoyochi
質問者

お礼

すばやい回答どうもありがとうございます。 詳細に記入いただき大変参考になりました。

moyoyochi
質問者

補足

本当に初心者ですいません。 現在私の扱っているプログラムではWORKING-STORAGE SECTIONでPICTURE句をN項目で定義しています。その場合だとどのようになるのでしょうか。 プログラムの抜粋は以下のとおりです。 DATA DIVISION. FILE SECTION. *会員種別  K1-1 PIC 9(01). *会員番号  K1-2 PIC 9(06). *受講種目  K2 PIC 9(01). WORKING-STORAGE SECTION. 01 KAIIN-DATA 03 KD-1 PIC N(04) COLUMN 23. ←会員種別 03 KD-2 PIC N(06) ←会員番号 CHARACTER  TYPE  KM-7P  COLUMN 31. PROCDDURE DIVISION. ~~略~~  MOVE K1-2 TO KD-2 IF K1-1 = 1 MOVE NC"一般会員" TO KD-1 ELSE IF K1-1 = 1 MOVE NC"特別会員" TO KD-1

関連するQ&A