2017-11-15 65 views
0

あなたは問題ありません。私は問題があり、可能ならあなたの助けが必要です。MAINFRAME:データセットをCSV形式に変換するJCLの並べ替え

私はMainframe JCLと一緒に作業しており、レコードを持つデータセットがあります。各レコードには "〜"で区切られた異なる固定列があります(NAME列には名前がカンマで区切られています)。そのデータセットをCSVファイル形式に変換する必要があります。 1)コンマで区切ります 2)固定長ではなく可変長で 3)すべての列は必要ありません。それら(と元は異なる順序で) 4)最初columは異なっていなければならない 5)名は、(例れている場合:LAST NAME、NAME)

これは入力ファイルの例である「」を使用:

ROLENAME~LID  ~NAME     ~NONCNCL~ACCDATE ~SUSPEND 
CARINQ ~X  ~*** NOT FOUND ***  ~  ~  ~  
CARONL ~AZBLCH ~*** NOT FOUND ***  ~  ~  ~  
SOTHER ~BZBWD4 ~SUAREZ, VICTOR  ~N  ~10/01/17~N  
CARONL ~BZCJHS ~CHURCH DAVID S  ~N  ~11/10/17~N  
CARONL ~VZC2G1 ~*** NOT FOUND ***  ~  ~  ~  
CARONL ~BZDKKF ~PLAARDRTE ALLY  ~N  ~11/13/17~N  
SOTHER ~HZDFGH ~*** NOT FOUND ***  ~  ~  ~  
CARONL ~JZFPOI ~LOPEZ KAREN N   ~N  ~11/10/17~N  
CARONL ~IZG0WZ ~FOSHIL, RICHARD  ~N  ~11/13/17~N  
SOTHER ~OZG3T2 ~CARLINE KECHUA  ~N  ~11/13/17~N  
CARONL ~PZMMNB ~BARELTINE, DUANE  ~N  ~11/13/17~N  
CARONL ~PZNSWX ~*** NOT FOUND ***  ~  ~  ~  
CARONL ~RZPF5V ~SLIMMORE JACK   ~N  ~10/12/17~N 

これは、出力ファイルの例です:

GMID,Name,Last Login Date,Role/Group 
X,*** NOT FOUND ***,,CARINQ 
AZBLCH,*** NOT FOUND ***,,CARONL 
BZBWD4,"SUAREZ, VICTOR",10/01/17,SOTHER 
BZCJHS,CHURCH DAVID S,11/10/17,CARONL 
VZC2G1,*** NOT FOUND ***,,CARONL 
BZDKKF,PLAARDRTE ALLY,11/13/17,CARONL 
HZDFGH,*** NOT FOUND ***,,SOTHER 
JZFPOI,LOPEZ KAREN N,11/10/17,CARONL 
IZG0WZ,"FOSHIL, RICHARD",11/13/17,CARONL 
OZG3T2,CARLINE KECHUA,11/13/17,SOTHER 
PZMMNB,"BARELTINE, DUANE",11/13/17,CARONL 
PZNSWX,*** NOT FOUND ***,,CARONL 
RZPF5V,SLIMMORE JACK,10/12/17,CARONL 

INREC PARSEとBUILDを使用するためにSORTプログラムを使用しようとしていますが、とりわけフィールド長を修正するのではなくフィールド変数を作成して、カラムの名前を変更することはできません大したことではなく、必要に応じて後で連結してください(私はEasyTrieveを使い慣れていないので、EasyTrieveの使用を避けたいと思います)。 誰かがこれの例を持っていますか? SORTを使用して同様のケースを探しましたが、何も見つかりませんでした。私はレポートを作成することができます固定列だけで、私はそれを行う方法を見つけることができません可変長

私は長いテキストは申し訳ありませんが、私はできるだけ明確にしたい。 ありがとうございます! 良い昼/夜を過ごしましょう!

答えて

0

あなたはヘッダを心配していない場合は、使用することができます:

OPTION COPY        
INREC IFTHEN=(WHEN=INIT,BUILD=(1,15,31,15,46,15,SQZ=(SHIFT=LEFT))),  
     IFTHEN=(WHEN=INIT,FINDREP=(IN=C'~',OUT=C',')) 

私は80であることをLRECLを仮定しても、あなたが15でのみ3列1から始まるカラム、31および46を必要とすることを想定各バイト。

+0

ありがとうございます!それはそのままでは機能しませんでしたが、いくつかのエラーを修正するためのアイデアがありました。 –

+1

@Jorge答えが有用な場合は、 –

+0

を投票してみてください....しかし、それは私がそれを示すには十分な評判を持っていないと言います:( –