a ub@shddlZddlZddlZeejZddZddZddZ dd Z d d Z d d Z ddZ ddZdS)Nccs$||}|r |V||}q dS)N)read)ZaFileZrecSizerecBytesrX/Users/arunkse/Documents/Data/MyWork/GitHubRepos/mf-unlock-cobdata/src/cobdata_to_csv.py yieldRecordss rcCs`|dkrXt|tttfr6t|td|dd}q\d|d| || d}n|}|S)Nr10z{}.{}) isinstanceintfloatcomplexljustformat)ZnumberscaleresultrrraddDecimalPoints "rcCs`|sdS|dtj}dddd}||dd}d||dd|d}t||S) N+-)fcdrz{}{}{}r)encodecfgcodepagehexgetlowerrr)bytesrZ last_hexbyteZzd_signsignZ unpacked_valrrr unpack_zds r"cCs4|rtj|ddd}nd}|d|d}t||S)NZbigT) byteordersignedrz+0z.0f)r from_bytesr)r disp_sizerZcomp_decrrr unpack_comp#s r'cCsP|sdS|}|ddvr4d|dd}nd|dd}t||S)Nrr)brBDz-{}z+{})rrrr)r rZhexbytesZunpackedrrr unpack_comp3,sr+cCs6g}|D]"}|r ||q||qd|S)Nr) isprintableappendjoin)datamaskZout_datacharrrrhandle_non_printable8s   r2c Cst|d}tjt|ddddtjd}g}|D]\}}} } } } } ||q.||t||D]^}g}|D]D\}}} } } } } |||| }| dkrt|| }|ddd d dd d dd dd s|rd t |  }||qn| d krft|| | }|ddd d dd d dd dd sZ|rZd t |  }||qntt|d}| dkrt|| }|sd t |  }||qn||q`dS)NZrbwr)newline,)Z delimiterZquotingzCOMP-3.rrrz0x{}COMPrSIGNED)opencsvwriterZQUOTE_NONNUMERICr-Zwriterowrr+replace isnumericrstrrupperr'listdisplayr"r,)input_datafileZreclenlayoutoutput_datafileZ cobolFileZoutFileZ header_listnamestartsizer&usager!rrZ record_listZfieldZcomp3_unpackedZ comp_unpackedZdisprrrconvert_mfdata_to_csvBs6    2   6     rIc Csrd}g}|D]Z}d||dvr6||dd}||D]&}d|||vrj|||d}nd}|||ddd}|||d}d |||vr|||d }nd}d |||vr|||d } nd} d } d |||vr|||d rd } d|||vrB|||d} nd} |dkr>||||| || | fq>q ||fS)Nr lrecl_maxrHDISPLAY data_namer_offsetstorage_length disp_lengthZUNSIGNEDr$r8 precision)keysr<r-) parse_dictlreclrCZitem_1Zitem_2rHrLrNlengthrPr!rrrrget_cpy_layoutfs6 rV)configrcodecsr: getdecoderrrArrr"r'r+r2rIrVrrrrs      $