o .~b@shddlZddlZddlZeejZddZddZddZ dd Z d d Z d d Z ddZ ddZdS)Nccs,||}|r|V||}|sdSdS)N)read)ZaFileZrecSizerecBytesr=d:\MyWork\GitHubRepos\mf-unlock-cobdata\src\cobdata_to_csv.py yieldRecordss    rcCsd|dkr.t|tttfrt|td|dd}|Sd|d| || d}|S|}|S)Nr10z{}.{}) isinstanceintfloatcomplexljustformat)numberscaleresultrrraddDecimalPoints rcCs`|sdS|dtj}dddd}||dd}d||dd|d}t||S) N+-)fcdrz{}{}{}r)encodecfgcodepagehexgetlowerrr)bytesrZ last_hexbyteZzd_signsignZ unpacked_valrrr unpack_zds  r#cCs4|r tj|ddd}nd}|d|d}t||S)NbigT) byteordersignedrz+0z.0f)r from_bytesr)r! disp_sizerZcomp_decrrr unpack_comp#s  r)cCsP|sdS|}|ddvrd|dd}n d|dd}t||S)Nrr)brBDz-{}z+{})rr rr)r!rZhexbytesZunpackedrrr unpack_comp3,s r-cCs6g}|D]}|r||q||qd|S)Nr) isprintableappendjoin)datamaskZout_datacharrrrhandle_non_printable8s    r4c Cst|d}tjt|ddddtjd}g}|D]\}}} } } } } ||q||t||D]}g}|D]\}}} } } } } |||| }| dkrut|| }|ddd d dd dd so|rod t |  }||q6| d krt|| | }|ddd d dd dd s|rd t |  }||q6tt|d }| dkrt|| }|sd t |  }||q6||q0dS)Nrbwr)newline,) delimiterZquotingzCOMP-3.rrz0x{}COMPrSIGNED)opencsvwriterZQUOTE_NONNUMERICr/Zwriterowrr-replace isnumericrstrrupperr)listdisplayr#r.)input_datafileZreclenlayoutoutput_datafileZ cobolFileZoutFileZ header_listnamestartsizer(usager"rrZ record_listfieldZcomp3_unpackedZ comp_unpackedZdisprrrconvert_mfdata_to_csvBs8    (  (    rNc Cshd}g}|D]}d||dvr||dd}||D]}d|||vr3|||d}nd}|||ddd}|||d}d |||vr\|||d }nd}d |||vrq|||d } nd} d } d |||vr|||d rd } d|||vr|||d} nd} |dkr||||| || | fqq||fS)Nr lrecl_maxrLDISPLAY data_namer_offsetstorage_length disp_lengthZUNSIGNEDr&r< precision)keysr@r/) parse_dictlreclrGZitem_1Zitem_2rLrQrSlengthrUr"rrrrget_cpy_layoutfs: !r[)configrcodecsr> getdecoderrrErrr#r)r-r4rNr[rrrrs      $