a pbl)@sddlZGdddZddZddZdd Zd d Zd d Zd*ddZd+ddZddZ ddZ e dkrddl Z ddl Ze jddZejdddejdddd d!ejd"d#dd d!ejd$d%dd d!ejd&d'dd d!eZejejsed(ejeeejd)dZeeeZejsbejs>eeZejrNej sbeeej ej Ze eWdn1s0YdS),Nc@s|eZdZdZdZdZdZdZdZdZ e ee ee ee ee ee Z e dZe d Ze d Zd S) CobolPatternsz({})?z!^(?P\d{2})\s+(?P\S+)z\s+OCCURS (?P\d+) TIMESz"\s+INDEXED BY\s(?P\S+)z \s+REDEFINES\s(?P\S+)z\s+PIC\s+(?P\S+)z\.$z (.)\((\d+)\)zS?[9Z]*[.V][9Z]+zS?[9Z]+N)__name__ __module__ __qualname__Zopt_pattern_formatZrow_pattern_baseZrow_pattern_occursZrow_pattern_indexed_byZrow_pattern_redefinesZrow_pattern_picZrow_pattern_endrecompileformat row_patternpic_pattern_repeatspic_pattern_floatpic_pattern_integerr r V/Users/arunkse/Documents/Data/MyWork/GitHubRepos/mf-unlock-cobdata/src/python_cobol.pyrs*  rcCstj|}|sq<|dt|d}tj||d}qtj|rNd}ntj|r`d}nd}|ddkrd|}|dd}d}d |vrt || d dd}| d d }|t ||d S) NZFloatZIntegerZCharrSzSigned V)typeZlengthZ precision) rr searchgroupintsubr matchr lenindexreplace)Zpic_strrZ expanded_strZ data_typeZ decimal_posr r rparse_pic_strings$      rcCsg}g}|D]h}|dd}|dks |ddvr6q |t|dkrJ|n||ddkr |d|g}q t|dkrtd d||S) NHrr)*/. z:[WARNING] probably invalid COBOL - found unfinished line: )rstripappendrstripjoinprint)linesZholderoutputrowr r r clean_cobol?s  r-c s<g}ddg}|D]$}tj|s:td|q|D]$}|durbt|nd|<qFddurtdd<ddur,zhfddt|Dd \}}t |d||d d}|d|||t |d d}dd<Wn,t y*td d|Yn0| q|S) NleveloccurszFound unmatched rowpicZpic_info redefinescs(g|] \}}|ddkr||fqS)namer1r ).0ritemrr r uzparse_cobol..rrz9Could not find the field to be redefined ({}) for row: {})rr rr'r) groupdictrr enumerate get_subgroupr IndexErrorrr&)r*r+Zintifyr,iZredefinedItemIndexZ redefinedItemZ related_groupr r5r parse_cobol]s, " $  r=cCs2g}|D]$}|d|kr$||q|Sq|S)Nr.)r&)Z parent_levelr*r+r,r r rr:s    r:cCs t|dS)Nr) handle_occursr*r r rdenormalize_cobolsr@rcCsXg}td|dD]>}d}|dkr(|n|dt|}t|D]\}} ||krTq@| } | d|7<d| d<| ddur| d|| d<|| q@| ddurd| d<td| ddD]2} | } | d|dt| | d<|| qq@t| d||dd} || d| dd}|t| | d||7}|t| d}q@q|S) Nrr-r. indexed_byr/r2r0)rangestrr9copyr&r:r>r)r*r/Z level_diffZ name_postfixr+r<ZskipTillZnew_name_postfixrr,Znew_rowjZ row_to_addZ occur_linesZnew_level_diffr r rr>s0   r>FcCsi}|D]}|r`|d|dddd|d<|ddur`|d|dddd|d<|rd}|dkrx|dn|ddt||vr|d7}qhd||dkr|dn|ddt|<|dkr|ddt||d<|r|ddd|d<q|S)Nr2rArrB_)findrDr)r*Zensure_unique_namesZ strip_prefixZmake_database_safenamesr,r<r r r clean_namess " "( (rJcCstttt|dddS)NT)rJr@r=r-r?r r r process_cobolsrKc Csg}d}dg}|D]n}g}|d|dkr<||dn|d|dkrV|q<|t|dd|d|d||d|d dur|d |d |d dur|d |d |d dur|d|d |dd}d}|}|D]^} t|t| d|krX|dt|d7}|||t|ddd}|| 7}q|dt|d7}||qtd|dS)Nz rr.r"rz z {0:02d} r2rBz INDEXED BY r/z OCCURS {0:04d} TIMESr0z PIC r#BPr$z  )r&poprrr)r() r*r+Zdefault_paddingZlevelsr,Z row_outputZ tot_lengthZmax_data_lengthZoutpdatar r r print_cobols>         rQ__main__zParse COBOL Copybooks)Z descriptionfilenamezThe filename of the copybook.)helpz--skip-all-processingzOnly processes the redefines.Z store_true)rTdefaultactionz--skip-unique-nameszSkips making all names unique.z--skip-denormalizezSkips denormalizing the COBOL.z--skip-strip-prefixz*Skips stripping the prefix from the names.zCould not findr)rr)FFF)!rrrr-r=r:r@r>rJrKrQrZargparseZos.pathosZArgumentParserZparserZ add_argumentZ parse_argsargspathisfilerSr)exitopenf readlinesr*Zskip_all_processingZskip_denormalizeZskip_strip_prefixZskip_unique_namesr r r rs>#)  = 5