pycobol package

arbrezone

class ArbreZone(*args)

Bases : object

cette classe est un conteneur pour stocker des objets de

classe mere et de classe fille Elle implémente le pattern singleton

>>> obj = ArbreZone()
>>> obj.zone.append('1')
>>> obj2 = ArbreZone()
>>> print(obj2.zone)
['1']
__init__(*args)
autonomme(glob)
recherche_nom(nom)

retourne l’objet Zonegroupe ou ZonefilsSimple correpondant au nom

Paramètres:

nom (str) – Attribut “nom” de l’objet

Renvoie:

Un objet pycobol.ZoneGroupe ou pycobol.ZoneFilsSimple ou None

recherche_rang(n)

On essaye de trouver le rang COBOL (niveau) de l’element supérieur

La valeur 0 est retournée par defaut.

Paramètres:

n (int) – rang de l’element en cours de traitement

Renvoie:

niveau superieur ou 0

reset()

Remise à zero de toutes les structures

retroArbre()

Reconstitution des dependances des zones en partant des zones élémentaires

vidage()

Retourne la liste des zones et la liste des zones redefinis

Renvoie:

un tuple de deux listes

Type renvoyé:

tuple(list, list)

comportement

class Comportement(type_: str, longueur: int, valeur: str)

Bases : object

Permet de cadrer les variables de type ALN et NUM

Paramètres:
  • type – str

  • longueur – int

  • valeur – str

>>> obj = Comportement('ALN' , 10 , None)
>>> obj.initialize()
>>> obj.valeur_externe
'          '
>>> obj = Comportement('ALN' , 10 , 'eric' )
>>> obj.initialize()
>>> obj.valeur_externe
'eric      '
>>> len(obj.valeur_externe)
10
>>> obj = Comportement('NUM' , 10 , None )
>>> obj.initialize()
>>> obj.valeur_externe
'0000000000'
>>> obj = Comportement('NUM' , 10 , 50 )
>>> obj.initialize()
>>> obj.valeur_externe
'0000000050'
>>> len(obj.valeur_externe)
10
>>> obj = Comportement('SNUM' , 10 , None )
>>> obj.initialize()
>>> obj.valeur_externe
'+0000000000'
>>> obj = Comportement('SNUM' , 10 , -50 )
>>> obj.initialize()
>>> obj.valeur_externe
'-0000000050'
>>> len(obj.valeur_externe)
11
__init__(type_: str, longueur: int, valeur: str) None
classmethod from_object(obj)

Methode de classe retournant un objet comportement à partir d’une instance de zone

Param:

zone : objet zonage

initialize()

charge les zones en fonction de leur nature

longueur: int
move_value(objetzone, newvaleur)

methode pour affecter une valeur à une zone L’objet comportement est dejà instancié il connait la valeur de départ

Paramètres:

newvaleur – Nouvelle valeur a affecter (int ou str)

type_: str
valeur: str
class ComportementFloat(decimale, *args)

Bases : Comportement

__init__(decimale, *args)
classmethod from_object(obj)

Methode de classe retournant un objet comportement à partir d’une instance de zone :param: zone objet zonage

initialize()

charge les zones en fonction de leur nature

longueur: int
move_value(objetzone, newvaleur)

methode pour affecter une valeur à une zone L’objet comportement est dejà instancié il connait la valeur de départ :newvaleur: float ou int

type_: str
valeur: str
class Value(origine: str)

Bases : object

Cette classe prend en charge les valeurs : type str ou numerique presence d “un signe , partie entiere ou decimale

>>> obj = Value("eric")
>>> obj.numerique
False
>>> obj = Value(1961)
>>> obj.numerique
True
__init__(origine: str) None
formate: str
non_signe: str
numerique: bool
origine: str

zonage

class Flottant(decimale, nom, pic, valeur_initiale=None, usage='DISPLAY')

Bases : Zone

Gère les zones a virgule flottante PIC …V…

initialize()

injection du comportement

nom: str
rang: int
section: str
class Zone(nom: str, rang: int, section: str, son_type: str = 'ALN', usage: str = 'DISPLAY', longueur_utile: int = 0, valeur_interne: str = '', valeur_externe: str = '', picture: str = '', valeur_initialisation: str = '', comportement_associe: object | None = None)

Bases : object

Classe de base des zones COBOL

comportement_associe: object = None
initialize()

injection du comportement

longueur_utile: int = 0
move_value(newvalue)

Cette methode permet d affecter des valeurs à une zone. Elle utilise les objets de la classe comportement.

Paramètres:

newvalue – nouvelle valeur

nom: str
picture: str = ''
rang: int
section: str
son_type: str = 'ALN'
usage: str = 'DISPLAY'
valeur_externe: str = ''
valeur_initialisation: str = ''
valeur_interne: str = ''
zone_77: ClassVar[list] = []
class ZoneIndependante(nom, pic, valeur=None, usage='DISPLAY')

Bases : Zone

Zones qui sont en dehors des zones groupes

classmethod from_ligne(ligne)

Prise en charge des zones elementaires de niveau 77 a partir d’une ligne COBOL

Paramètres:

ligne (str) – la ligne cobol a analyser

>>> ligne = '      77  MAZONE PIC X(10).'
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.son_type
'ALN'
>>> obj.longueur_utile
10
>>> obj.picture
'X(10)'
>>> ligne = "      77  MAZONE PIC X(10) VALUE 'er'."
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.son_type
'ALN'
>>> obj.longueur_utile
10
>>> obj.picture
'X(10)'
>>> obj.valeur_initialisation
'er'
>>> obj.valeur_interne
'er'
>>> ligne = "      77  MAZONE PIC 999."
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.son_type
'NUM'
>>> obj.longueur_utile
3
>>> obj.picture
'999'
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC 9999 VALUE 0.")
>>> obj.valeur_interne
0
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC 9999 VALUE ZERO.")
>>> obj.valeur_interne
0
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC S999V99 VALUE ZERO.")
>>> obj.valeur_interne
0
>>> obj.son_type
'SFLOAT'
>>> obj.longueur_utile
5
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC S999 VALUE ZERO.")
>>> obj.valeur_interne
0
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC S9(3) VALUE ZERO.")
>>> obj.valeur_interne
0
>>> obj=ZoneIndependante.from_ligne("77  NPAG PIC 9(3)V99 VALUE ZERO.")
>>> obj.valeur_interne
0.0
>>> obj.son_type
'FLOAT'
>>> obj.longueur_utile
5
 >>> ligne = "      77  MAZONE PIC X(10) VALUE SPACE."
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.son_type
'ALN'
>>> obj.longueur_utile
10
>>> obj.valeur_interne
''
>>> ligne = "      77  MAZONE PIC X(10)."
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.valeur_externe
'          '
>>> ligne = "      77  MANUM PIC 9(10)."
>>> obj =ZoneIndependante.from_ligne(ligne)
>>> obj.valeur_externe
'0000000000'
init_variable()
classmethod liste_ws()
move_from(emetteur)

Not implemented

nom: str
rang: int
section: str

zonegroupe

class ZoneGroupe(nom: str, rang: int, pere: int = 0, fils: list = <factory>, son_type: str = 'GRP', usage: str = 'DISPLAY', longueur_utile: int = 0, valeur_interne: str = '', valeur_externe: str = '', section: str = 'NON RENSEIGNE', comportement_associe: object | None = None)

Bases : object

Cette classe prend en charge la creation d’une zone groupe. Par nature cette zone est de type ALN. Sa longueur est la somme des longueurs des composants qui la composent

>>> obj = ZoneGroupe('zoneessai', 1, 0)
>>> obj.nom
'zoneessai'
>>> objfils = ZoneGroupe('zonefils', 2)
>>> obj.ajout_fils_groupe(objfils)
>>> len(obj.fils)
1
>>> from zonesimple import *
>>> objfilsimp = ZoneFilsSimple('essaifils', 5, picture = '999')
>>> obj.ajout_fils_simple(objfilsimp)
>>> obj.longueur_utile
3
>>> obj.init_groupe()
>>> obj.move_value('ERIC')
>>> obj.valeur_externe
'ERI'
>>> objfilgrp = ZoneGroupe('essaifils', 2)
>>> objfilsimp2 = ZoneFilsSimple('essaifils2',5 , picture = '99')
>>> objfilgrp.ajout_fils_simple(objfilsimp2)
>>> obj.ajout_fils_simple(objfilgrp)
>>> objfilsimp3 = ZoneFilsSimple('essaifils5',5 , picture = 'XXXXX')
>>> obj.ajout_fils_simple(objfilsimp3)
>>> obj.maj_longueur()
10
>>> obj.longueur_utile
10
>>> obj.init_groupe()
Paramètres:
  • nom (str) –

  • rang (int) –

  • pere (int) –

  • fils (obj) –

  • son_type (str) –

__init__(nom: str, rang: int, pere: int = 0, fils: list = <factory>, son_type: str = 'GRP', usage: str = 'DISPLAY', longueur_utile: int = 0, valeur_interne: str = '', valeur_externe: str = '', section: str = 'NON RENSEIGNE', comportement_associe: object | None = None) None
ajout_fils_groupe(other)
ajout_fils_simple(other)
comportement_associe: object = None
fils: list
static get_arbre()
init_groupe()
longueur_utile: int = 0
maj_longueur()

normalement tous les ajouts de zones provoquent la mise à jour de la longueur les zones simples sont initialisées , il faut repercuter l’init sur les zones groupes meres La zone groupe doit etre parcourue: pour toute zone simple on reprendra la valeur , si c est une zone groupe il faut elle aussi la parcourir. L’objectif est de mettre à jour les valeurs resultantes.

maj_valeur()

normalement tous les ajouts de zones provoquent la mise à jour de la longueur les zones simples sont initialisées , il faut repercuter l’init sur les zones groupes meres La zone groupe doit etre parcourue: pour toute zone simple on reprendra la valeur , si c est une zone groupe il faut elle aussi la parcourir. L’objectif est de mettre à jour les valeurs resultantes.

move_to(other)

methode interne

move_value(valeur)
nom: str
pere: int = 0
propage(valeur)
rang: int
static reset_arbre()
retro_propagation()
section: str = 'NON RENSEIGNE'
son_type: str = 'GRP'
static traite_filler(filler, nom)

Une zone filler peut avoir des doublons, le nom sera donc formé du nom de la zone accolé avec le nom de la structure supérieure. En cas de doublon un indice est ajouté à l’ensemnle.

Paramètres:
  • filler (str) – nom de la zone , a priori souvent égale à filler

  • nom (str) – nom de la structure supérieure

>>> traite_filler('filler', 'sup')
'filler_sup'
usage: str = 'DISPLAY'
valeur_externe: str = ''
valeur_interne: str = ''
static vidage()

zonesimple

class ZoneFilsSimple(nom: str, rang: int, pere: int = 0, fils: list = <factory>, son_type: str = 'GRP', usage: str = 'DISPLAY', longueur_utile: int = 0, valeur_interne: str = '', valeur_externe: str = '', section: str = 'NON RENSEIGNE', comportement_associe: object | None = None, picture: str = '', valeur_initialisation: str | None = None, decimale: int = 0)

Bases : ZoneGroupe

Cette classe permet de creer des zones simples qui iront sous de zones groupes

>>> obj = ZoneFilsSimple('essaifils', 5, picture = '999')
decimale: int = 0
initialize()
picture: str = ''
valeur_initialisation: str = None
class ZoneGroupeRedefine(cible, *args, **kwargs)

Bases : ZoneGroupe

Cette classe gère les clauses redefines de type zone groupe Le constructeur doit comporter la cible à redefinir >>> obj = ZoneFilsSimple(“essaifils”, 5, picture = “99999999”) >>> obj2 = ZoneGroupeRedefine(“essaifils”, “essairedefines” ,5) >>> objj = ZoneFilsSimple(“jj”, 6, picture = “99”) >>> objmm = ZoneFilsSimple(“mm”, 6, picture = “99”) >>> objaa = ZoneFilsSimple(“aaaa”, 6, picture = “9999”) >>> obj2.ajout_fils_simple(objj) >>> obj2.ajout_fils_simple(objmm) >>> obj2.ajout_fils_simple(objaa) >>> obj2.init_groupe() >>> a = ZoneGroupe.get_arbre() >>> print (len(a)) 5 >>> arbre = ArbreZone() >>> len(arbre.redefine.keys()) 1 >>> len(arbre.inv_redefine.keys()) 1

fils: list
nom: str
rang: int
class ZoneSimpleRedefine(cible, *args, **kwargs)

Bases : ZoneFilsSimple

Cette classe gère les clauses redefines de type zone simple Le constructeur doit comporter la cible à redefinir

>>> obj = ZoneFilsSimple('essaifils', 5, picture = '999')
>>> obj2 = ZoneSimpleRedefine('essaifils', 'essairedefines' ,5, picture = 'XXX' )
>>> a = ZoneGroupe.get_arbre()
>>> print (len(a))
2
>>> arbre = ArbreZone()
>>> len(arbre.redefine.keys()) 
1
>>> len(arbre.inv_redefine.keys()) 
1
fils: list
nom: str
rang: int

nature_pic

class Nature_pic(pic)

Bases : object

Traitement du format d’une clause PIC

Paramètres:

pic (str) – format pic à traiter

>>> obj = Nature_pic('999')
>>> obj.nature
'NUM'
>>> obj.longueur
3
>>> obj = Nature_pic('S999')
>>> obj.nature
'SNUM'
>>> obj.longueur
3
>>> obj.virgule
False
>>> obj = Nature_pic('99V9')
>>> obj.nature
'FLOAT'
>>> obj.longueur
3
>>> obj.longueur
3
>>> obj = Nature_pic('S99V9')
>>> obj.nature
'SFLOAT'
>>> obj.longueur
3
>>> obj.virgule
True
>>> obj = Nature_pic('XX')
>>> obj.nature
'ALN'
>>> obj.longueur
2
calcul_longueur()
pose_virgule()
support = {'9': 'NUM', 'A': 'ALP', 'S': 'SNUM', 'X': 'ALN'}

redefine

class ZoneGroupeRedefine(cible, *args, **kwargs)

Bases : ZoneGroupe

Cette classe gère les clauses redefines de type zone groupe Le constructeur doit comporter la cible à redefinir >>> obj = ZoneFilsSimple(“essaifils”, 5, picture = “99999999”) >>> obj2 = ZoneGroupeRedefine(“essaifils”, “essairedefines” ,5) >>> objj = ZoneFilsSimple(“jj”, 6, picture = “99”) >>> objmm = ZoneFilsSimple(“mm”, 6, picture = “99”) >>> objaa = ZoneFilsSimple(“aaaa”, 6, picture = “9999”) >>> obj2.ajout_fils_simple(objj) >>> obj2.ajout_fils_simple(objmm) >>> obj2.ajout_fils_simple(objaa) >>> obj2.init_groupe() >>> a = ZoneGroupe.get_arbre() >>> print (len(a)) 5 >>> arbre = ArbreZone() >>> len(arbre.redefine.keys()) 1 >>> len(arbre.inv_redefine.keys()) 1

fils: list
nom: str
rang: int
class ZoneSimpleRedefine(cible, *args, **kwargs)

Bases : ZoneFilsSimple

Cette classe gère les clauses redefines de type zone simple Le constructeur doit comporter la cible à redefinir

>>> obj = ZoneFilsSimple('essaifils', 5, picture = '999')
>>> obj2 = ZoneSimpleRedefine('essaifils', 'essairedefines' ,5, picture = 'XXX' )
>>> a = ZoneGroupe.get_arbre()
>>> print (len(a))
2
>>> arbre = ArbreZone()
>>> len(arbre.redefine.keys()) 
1
>>> len(arbre.inv_redefine.keys()) 
1