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

cVFPName() Nom valide pour VFP, avec longueur limitée si nécessaire   



L'auteur

FoxInCloud
France France
Membre Simple
# 0000000014
enregistré le 13/10/2004

http://www.foxincloud.com/
Nivelet Thierry
75016 Paris
de la société Abaque
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Conversions

cVFPName() Nom valide pour VFP, avec longueur limitée si nécessaire
# 0000000023
ajouté le 21/10/2004 10:16:25 et modifié le 30/03/2005
consulté 2271 fois
Niveau débutant

Description
Crée un nom respectant les règles de nomination de VFP.

Peut servir à nommer tout élément VFP :
- champ
- variable
- procédure
- etc.

cVFPName_Test() illustre le comportement de cVFPName()
Code source :
******************************************************************************************
    FUNCTION cVFPName && Nom valide pour VFP, avec longueur limitée si nécessaire
    LPARAMETERS ;
        tcVFPName, ; && Nom VFP à valider
        tnLength && [len(tcVFPName)] Longueur maximale du nom (par ex. 10 pour un nom de champ de table libre)

    LOCAL lcResult
    m.lcResult = space(0)

    IF Vartype(m.tcVFPName) = 'C' ;
     AND ! Empty(m.tcVFPName)

        * Remove accents
        LOCAL lcVFPName
        m.lcVFPName = cEuroANSI(alltrim (m.tcVFPName))

        * Start with underscore if first is a digit
        m.lcVFPName = Iif(IsDigit(m.lcVFPName), UNDERSCORE, Space(0)) + m.lcVFPName

        * Turn characters neither digit or letter to underscore
        LOCAL lnCar, lcCar
        FOR m.lnCar = 1 TO Len(m.lcVFPName)
            m.lcCar = Substrc(m.lcVFPName, m.lnCar, 1)
            m.lcCar = Iif(isDigit(m.lcCar) or IsAlpha(m.lcCar), ;
                         m.lcCar, UNDERSCORE)
            m.lcResult = m.lcResult + Upper(m.lcCar)
        ENDFOR

        * Remove duplicate underscores
        m.lcResult = cRepCharDel (m.lcResult, UNDERSCORE)
        m.lcResult = Iif(m.lcResult==UNDERSCORE, Space(0), m.lcResult)

        * Trim right is required
        IF Vartype(m.tnLength) = 'N' ;
         AND m.tnLength > 0
            m.lcResult = Leftc(m.lcResult, m.tnLength)
        ENDIF

    ENDIF

    RETURN m.lcResult

    * -----------------------------------------------------------------
    PROCEDURE cVFPName_Test
    ? Sys(16)
    ? cVFPName ('%cartable/poiré') == '_CARTABLE_POIRE'
    ? cVFPName ('2cartable.poiré') == '_2CARTABLE_POIRE'
    ? cVFPName ('2cartable.:poiré') == '_2CARTABLE_POIRE'
    ? cVFPName ('2cartable.:poiré', 9) == Leftc('_2CARTABLE_POIRE', 9)
    ? cVFPName ('150') == '_150'


Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

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