ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

exemple d'utilisation de APROCINFO pour documenter un .prg   



L'auteur

Jean à Grenoble
France France
Membre Actif (personne physique)
# 0000000032
enregistré le 16/10/2004

http://www.j-maurice.fr
69 ans
MAURICE JEAN
38000 GRENOBLE
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Tableaux / Array

exemple d'utilisation de APROCINFO pour documenter un .prg
# 0000000495
ajouté le 18/11/2007 15:57:05 et modifié le 18/11/2007
consulté 9491 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0

Description
ce petit programme (que je lance pour ma part par un ON KEY LABEL ALT+I DO (HOME()+"info_prg") récupère des informations interessantes sur le .prg courant par la fonction APROCINFO.

On ordonne les informations par numéro de ligne ce qui permet d'obtenir un ordre logique. Puis on crée un fichier pour y mettre le résultat.
Code source :
* J. MAURICE : exemple d'utilisation de APROCINFO pour documenter une classe programmée
IF EMPTYWONTOP())
  WAIT WINDOW "IMPOSSIBLE D'EXECUTER LA MACRO :"CHR(13) + " PAS DE FENETRE ACTIVE" NOWAIT
ELSE
  LOCAL lcfenetre, lcfichier, lcsortie, lnhandle, lnligne0, lni, ;
   llproc1, llyaclasse, lcclasse, lnlong, lc4, lldirect1
  LOCAL ARRAY lttab0(1)
  STORE .T. TO llproc1, lldirect1
  STORE .F. TO llyaclasse
  STORE 0 TO lnlong
  STORE "" TO lcclasse
  lcfichier = WTITLE()
  lcsortie = JUSTSTEM(m.lcfichier)+ ".lcp"
  ERASE (m.lcsortie)
  lnligne0 = APROCINFO(lttab0, m.lcfichier, 0)
  = ASORT(lttab0, 2)
  lnhandle = FCREATE( m.lcsortie,0)
  IF m.lnhandle > -1
    * = FPUTS(m.lnhandle, "** Classes et procédures de "+ m.lcfichier + ;
     " (maj du "DTOC(DATE())+ " "+TIME()+ ")")
    *SET STEP ON
    FOR m.lni = 1 TO m.lnligne0
       lc4 = lttab0(m.lni,3)
       DO CASE
       CASE m.lc4 = "Directive"
         IF m.lldirect1
           = FPUTS(m.lnhandle, "** Liste des directives")
           lldirect1 = .F.
         ENDIF && lldirect1
         IF LEFT(lttab0(m.lni,1),7) == "INCLUDE"
           * on liste les include (mais pas les #IF, #ENDIF, ...)
           = FPUTS(m.lnhandle, "** "STR(lttab0( m.lni,2), 6)+ " "+ lttab0(m.lni, 1))
         ENDIF && LEFT(lttab0(m.lni,1),7) == "INCLUDE"
       CASE m.lc4 = "Procedure"
         IF m.llyaclasse
           = FPUTS(m.lnhandle, "** "STR(lttab0( m.lni,2), 6)+ " "+ ;
            SUBSTR(lttab0(m.lni, 1), m.lnlong))
         ELSE
           * on liste les procédures et fonctions du .prg. Ce sont de
           * vraies fonctions ou procedures et non des méthodes d'une
           * classe. On y accède par un DO ... IN ...
           IF m.llproc1
             * c'est la première procédure que l'on liste, il faut mettre
             * un titre
             llproc1 = .F.
             = FPUTS(m.lnhandle, "** Fonctions et Procédures (hors méthodes de classe)")
           ENDIF && m.llproc1
           = FPUTS(m.lnhandle, "** "STR(lttab0( m.lni,2), 6)+ " "+ lttab0(m.lni, 1))
         ENDIF && m.llyaclasse
       CASE m.lc4 = "Class"
         = FPUTS( m.lnhandle, "**")
         llyaclasse = .T.
         lnlong = AT(" AS ", lttab0(m.lni, 1))
         lcclasse = IIF(m.lnlong = 0, lttab0(m.lni, 1), ;
          LEFT(lttab0(m.lni, 1), m.lnlong -1))
         = FPUTS( m.lnhandle, "** Classe: "UPPER(m.lcclasse)+ IIF(m.lnlong=0, "", ;
          " basée sur " + SUBSTR(lttab0(m.lni, 1), m.lnlong+4 )))
         lnlong = LEN(m.lcclasse) + 1
       CASE m.lc4 = "Define"
         * on ne liste pas les #DEFINE
       ENDCASE
    ENDFOR &&* m.lni = 1 TO m.lnligne0
    = FCLOSE(m.lnhandle)
    MODIFY FILE (m.lcsortie) NOWAIT
  ELSE
    WAIT WINDOW "Impossible de créer "+ m.lcsortie NOWAIT
  ENDIF && m.lnhandle > 0
ENDIF && EMPTY(WOUTPUT())

Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3