Menu sources

Tag Collection

Gérer une chaine de caractère comme un fichier INI
Stocker plusieurs variables dans les TAG très simplement

En VB les TAG sont très pratiques on peut y mettre tout et n'importe quoi
Mais parfois un seul emplacement c'est limité, une collection de tag serait bien utile ...
Cette classe simule une collection dans une chaine de caractères

Exemple : pour placer une variable VALUE et une variable INDEX dans le TAG d'un ListItem Par la suite il est possible d'accéder à l'une ou l'autre des variables Voici le source complet du module :

( Sources convertis en 6 couleurs avec mon programme VB to HTML)


Option Explicit 

'===========================================================================
'   fredjust
'   fredjust@hotmail.com
'   Active Visual Basic
'   http://www.fredjust.com
'===========================================================================

'===========================================================================
'   CE MODULE GERE UNE CHAINE COMME UNE SECTION D UN FICHIER INI
'   IL EST POSSIBLE D AJOUTER DE LIRE ET DE SUPPRIMER DES VALEURS
'   CELA PERMET DE PLACER PLUSIEURS VALEURS DANS UN SEUL TAG
'
'   EXEMPLE si
'   tempo="|NOM=Just|PRENOM=Fred|AGE=27|MAIL=fredjust@hotmail.com|"
'
'   IL EST POSSIBLE DE RECUPERER LE NOM PAR tagReadValue(tempo,"nom")
'
'   LA "CASE" POUR LES "NAME" EST IGNOREE (mais pas pour les "VALUE")
'   tagReadValue(tempo,"Nom") RENVOIE AUSSI LE NOM
'
'   PAR DEFAUT :
'   LES DIFFERENTES VALEURS SONT SEPAREES PAR DES | (Alt Gr + 6)
'   LE SIGNE := EST UTILSER APRES CHAQUE NAME
' ! LES "NAME" ET LES "VALUE" TRANSMISENT NE DOIVENT PAS COMPORTER CES CARACTERES !
'
'   IL EST POSSIBLE DE LES MODIFIER VIA la procedure tagInit
'===========================================================================

Private tagSigneEq As String
Private tagSeparator As String

'===========================================================================
'   INITIALISE OU CHANGE LES CARATERES DE SEPARATIONS
'===========================================================================
Public Sub tagInit(Optional ByVal SigneEq As String = ":=", _
                    Optional ByVal Separator As String = "|")
    tagSigneEq = SigneEq
    tagSeparator = Separator
End Sub

'===========================================================================
'   ECRIT OU REMPLACE LA VARIABLE DE NOM "NAME"
'   RENVOIE LA CHAINE ENTIERE MODIFIEE
'===========================================================================
Public Function tagWriteValue(ByVal TheTag As String, ByVal Name As String, _
    ByVal Value As String) As String
    
    Dim Where As Long
    Dim Tempo As String
    
    'si c'est la premier valeur insérée
    If InStr(1, TheTag, tagSeparator) = 0 Then TheTag = tagSeparator
    
    ' recherche si cette variable existe deja
    Where = InStr(1, TheTag, tagSeparator & UCase(Name) & tagSigneEq)
    
    If Where = 0 Then
        ' elle n'existe pas on l'ajoute
        tagWriteValue = TheTag & UCase(Name) & tagSigneEq & Value & tagSeparator
    Else
        ' elle existe on doit la remplacer
        ' on efface l'ancienne ...
        Tempo = tagDeleteValue(TheTag, Name)
        ' ... on ajoute la nouvelle
        tagWriteValue = Tempo & UCase(Name) & tagSigneEq & Value & tagSeparator
    End If
    
End Function

'===========================================================================
'   RENVOIE LA VALEUR DE LA VARIABLE DEMANDEE
'===========================================================================
Public Function tagReadValue(ByVal TheTag As String, ByVal Name As String, _
                                Optional ByVal Default As String = "") As String
    
    Dim Where As Long
    Dim debut As Long
    Dim suivant As Long
    ' recherche la valeur
    Where = InStr(1, TheTag, tagSeparator & UCase(Name) & tagSigneEq)
    
    If Where = 0 Then
        ' elle n'existe pas on renvoie la valeur par defaut
        tagReadValue = Default
    Else
        ' elle existe on l'extrait et on la renvoie
        debut = Where + Len(Name) + Len(tagSigneEq) + Len(tagSeparator)
        suivant = InStr(Where + Len(tagSeparator), TheTag, tagSeparator)
        tagReadValue = Mid$(TheTag, debut, _
             suivant - debut)
    End If
    
End Function


'===========================================================================
'   EFFACE UNE VARIABLE
'===========================================================================
Public Function tagDeleteValue(ByVal TheTag As String, _
    ByVal Name As String) As String
    
    Dim Where As Long
    
    ' recherche la valeur
    Where = InStr(1, TheTag, tagSeparator & UCase(Name) & tagSigneEq)
    
    If Where <> 0 Then
        ' elle existe on la supprime
        TheTag = Replace$(TheTag, _
             Mid$(TheTag, Where + Len(tagSeparator), InStr(Where + 1, TheTag, tagSeparator) - Where), _
             "")
        tagDeleteValue = TheTag
        
    Else
        ' elle n'existe pas => rien a faire
        tagDeleteValue = TheTag
    End If
    
End Function