プロが教えるわが家の防犯対策術!

COBOL85のコーディングについて教えてください。
以下のようなレコードを持つテーブルで、CD1="B"のレコードを、(1)→(2)→(3)の降順で読み込むには、どのようにコーディングすれば可能でしょうか?
コーディング例をお願いします。

  CD1|CD2|DATE
  ――――――――――――――――
  A  |1  |20120101
  A  |2  |20991231
(3) B  |1  |20120101
(2) B  |2  |20131231
(1) B  |3  |20991231
  C  |1  |20120101
  C  |2  |20991231

A 回答 (3件)

COBOLで扱える標準編成ファイルは、基本的に順編成ファイル、直編成ファイル、索引順編成ファイル、区分編成ファイル


の4種類です。(マシンにより、汎用機、linux(unix系)にもよるのですが、ご質問の言語はどの環境で取り扱うのでしょうか?
汎用機などでは、COBOL言語だけでなく、js(jcl)のユーティリティも駆使して実現することになります。
また、unix系だと、専用のユーティリティ(sort、margeなど)も用意されているかと思いますが??
また、扱うデータ量によりDBを選択する選択肢もあります。

この回答への補足

大変失礼しました。
ACOS2の環境で取り扱います。

補足日時:2012/07/11 09:00
    • good
    • 0

2か、4ならしってるけど多分同じでしょ(操作方法は大幅に違うかな..)だとしても、ファイル編成は多分同じなので


上記通りのファイルであれば、Bのレコードが上記例で3件程度なら、一度メモリに貯めこんで、内部ソートするのが
いいと思います。
最近のCOBOLでは、OCCURS句にて最大65534指定できるかと思いましたが、一昔では最大255でした。
この辺は、COBOLマニュアルを確認してください。

仮に、何件くるかわからない場合は、Bのレコードを別ファイルに抜き出して、(BをキーとしJCLで抽出)後、Bが
入ったファイルをsort(降順に)後、上記ファイルと抜き出しソート後ファイルを照合し結果として上記ご質問の内容を
実現する方法があるかと思います。


 元のファイル(キーのみ抜粋)
   A,1
   A,2
   B,1
   B,2     
   B,3
   C,1
   C,2   

  上記ファイルを抽出 (temp1)

   B,1
   B,2     
   B,3
    
   ソート後ファイル ファイル1

   B,3
   B,2     
   B,1

  このファイルと元のファイルからBを除いたファイル (以下ファイル2と仮名)

   A,1
   A,2
   C,1
   C,2   

   ファイル1とファイル2を照合(1番目の項目を照合キーとして)

   A,1
   A,2
   B,3
   B,2     
   B,1
   C,1
   C,2   

   結果上記B項目が降順となるようにファイルが作成される
   (って具合になるかと思います)

  (注意:上記例では、CD1がコード順であることが前提です。) 
      
   ★基本的に汎用機では大容量のデータを扱うことが多くマシン1台に多くの端末がぶら下がり
    多くの利用者が同時に利用しています。よってあまり多くのレコードをメモリ上に抱えて処理する
    のは好ましくありません。上記例のようにファイルの抽出、ソート、マージのパターンを駆使して
    処理を実現していきます。
    JCLを利用して処理を考案する前に、マニュアルとしてスーパーバイザ解説書ってのがある
    はずなので最初にそれを熟読しておきましょ!

  
  
    • good
    • 0

データベースなのか、シーケンシャルファイルなのかで違うと思いますが


データベースなら

EXEC SQL DECLARE CUR1 CURSOR FOR
SELECT CD1,CD2,DATE
FROM テーブル
ORDER BY CD2 DESC
END-EXEC.

EXEC SQL DECLARE CUR1 CURSOR FOR

EXEC SQL
FETCH CUR1
INTO :XXX-REC
END-EXEC.

みたいにすると、ソートのかかった状態でデータ処理できますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!