IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Manipulations chaîne de caractères en Visual Basic 6


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2016
    Messages : 40
    Points : 11
    Points
    11
    Par défaut Manipulations chaîne de caractères en Visual Basic 6
    Bonjour,
    n'ayant pas l'habitude d'utiliser ce forum, j'espère être au bon endroit.
    Mon collègue est en arrêt maladie je dois le remplacer pour effectuer un impact urgent sur du VB6 que je ne connais pas du tout.

    Mais on m'a dit qu'il n'y avait pas grand chose à faire.....

    Dans une variable OrdreSQL, nous récupérons le texte d'une requête. Mais nous nous sommes aperçu qu'il fallait désormais modifier le format de la date à l'intérieur dans le cas ou le format serait incorrect.

    Par exemple, la variable OrdreSQL contient : "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) ;" avec une date au mauvais format.

    Le but étant de balayer le contenue d'OdreSQL, pour vérifier la présence d'une date au format {d 'YYYY-MM-DD'} et si présent la transformer.

    En reprenant cet exemple, il faudrait qu'OdreSQL soit transformé comme ceci : "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > 20160101) ;"

    J'essaye de manipuler cette chaîne de caractères avec les fonctions InStr, Left et right mais j'ai du mal.

    Merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut OrdreSQL
    OrdreSQL=Replace(OrdreSQL,"{","")
    OrdreSQL=Replace(OrdreSQL,"{d","")
    OrdreSQL=Replace(OrdreSQL,"'","")
    OrdreSQL=Replace(OrdreSQL,"-","")
    OrdreSQL=Replace(OrdreSQL,"}","")

  3. #3
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Salut

    Même approche mais un Replace un peu diffèrent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OrdreSQL = Replace(OrdreSQL, "{d '", "")
    OrdreSQL = Replace(OrdreSQL, "-", "")
    OrdreSQL = Replace(OrdreSQL, "'}", "")
    car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    OrdreSQL = Replace(OrdreSQL, "{", "")
    OrdreSQL = Replace(OrdreSQL, "{d", "")  ' il n'y a plus de { donc aucun remplacement, le d reste dans le résultat
    OrdreSQL = Replace(OrdreSQL, "'", "")
    OrdreSQL = Replace(OrdreSQL, "-", "")
    OrdreSQL = Replace(OrdreSQL, "}", "")
    L'exemple du mois et jour à 01 reste gênant, le format possible en entrée est YYYY-MM-DD la sortie est-elle aussi du même format dans l'ordre du anné/mois/jour, si oui, pas de problème sinon il faudra passer par la fonction Format pour les dates.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2016
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses.

    oui le format de sortie est bien année mois et jour.
    J'avais pensé à la fonction replace.
    Dans mon exemple, il s'agit d'une requête simple, dans une requête plus complexe contenue dans OrdreSQL, je voudrais être sur que les remplacements se font uniquement dans la zone que je dos transformer.
    Je me dis que si un peu plus loin, il y également des "-" dans un libellé par exemple, ils vont être supprimés également.
    J'avais pensé aux fonctions InStr, left et right pour localiser exactement l'endroit de la transformation mais je n'arrive pas a les manipuler.

    J'ai commencé à faire un "if InStr(OrdreSQL,"{d'") <> 0 then, c'est que j'ai trouvé la date au mauvais format à changer et j'ai localiser le début de la zone, mais après ?????

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim OrdreSQL As String
    Dim Deb As Integer, Fin As Integer, StrDate As String, StrReplace As String
     
    OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) ;" ' ********* pour essais ***********
    Deb = InStr(OrdreSQL, "{d '")
    If Deb <> 0 Then
        Deb = Deb + 4
        Fin = InStr(Deb, OrdreSQL, "'}", vbTextCompare)
        StrDate = Mid(OrdreSQL, Deb, Fin - Deb)
        StrReplace = Replace(StrDate, "-", "")
        StrDate = "{d '" & StrDate & "'}"
        OrdreSQL = Replace(OrdreSQL, StrDate, StrReplace)
        'MsgBox OrdreSQL, vbInformation ' ********* pour essais ***********
    End If

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2016
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup.

    J'ai une incompatibilité lors de la compilation car je viens de m'apercevoir que la variable OrdreSQL est déclarée comme ceci : Global OrdreSQL() As String, sous forme de tableau il me semble.

    J'essaye de trouver une parade....

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Citation Envoyé par vinceago Voir le message
    Merci beaucoup.

    J'ai une incompatibilité lors de la compilation car je viens de m'apercevoir que la variable OrdreSQL est déclarée comme ceci : Global OrdreSQL() As String, sous forme de tableau il me semble.

    J'essaye de trouver une parade....
    Cette variable est donc une variable tableau, essais d'enlever les ( ) dans la déclaration.
    Une autre méthode, pour un même résulta, en utilisant RegExp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim OrdreSQL As String, StrDate As String, StrReplace As String
    Dim RegularExpressioN As Object, ResulT As Object
     
    OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) ;"
     
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    RegularExpressioN.Pattern = "{d '\d\w.........."
    Set ResulT = RegularExpressioN.Execute(OrdreSQL)
    If ResulT.Count = 1 Then
        StrDate = ResulT.Item(0).Value
        RegularExpressioN.Pattern = "[{d'} -]"
        RegularExpressioN.Global = True
        StrReplace = RegularExpressioN.Replace(StrDate, "")
        RegularExpressioN.Pattern = "{d '\d\w.........."
        MsgBox OrdreSQL & vbCrLf & RegularExpressioN.Replace(OrdreSQL, StrReplace), vbInformation
        Else
        MsgBox "Pas de concordance trouvée", vbInformation
    End If
    Set RegularExpressioN = Nothing
    Set ResulT = Nothing

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2016
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Oui merci mais cette variable tableau est utilisé par la suite et donc je ne peux pas modifier son type.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2016
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Bon, j'ai réussi à intercepter le contenue avant qu'il soit intégré dans cette variable tableau.

    Une dernière question, est-ce que les codes transmis peuvent s'appliquer dans le cas ou il existerait plusieurs dates comme par exemple :

    OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) and (v203.c_fadr_a203 < {d '2016-01-31'});"

  10. #10
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Salut

    Citation Envoyé par vinceago Voir le message
    Bon, j'ai réussi à intercepter le contenue avant qu'il soit intégré dans cette variable tableau.
    Bien

    Citation Envoyé par vinceago Voir le message
    Une dernière question, est-ce que les codes transmis peuvent s'appliquer dans le cas ou il existerait plusieurs dates comme par exemple :

    OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) and (v203.c_fadr_a203 < {d '2016-01-31'});"
    D’où l’intérêt d'utiliser RergExp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Function FormatSortie(EntreR As String) As String
    Dim OrdreSQL As String, StrDate As String, StrReplace As String
    Dim RegularExpressioN As Object, ResulT As Object, Match As Object
     
    FormatSortie = EntreR
     
    Set RegularExpressioN = CreateObject("VBScript.RegExp")
    RegularExpressioN.Pattern = "{d '\d\w.........."
    RegularExpressioN.Global = True
    Set ResulT = RegularExpressioN.Execute(FormatSortie)
    If ResulT.Count >= 1 Then
        For Each Match In ResulT
            StrDate = Match.Value
            RegularExpressioN.Pattern = "[{d'} -]"
            RegularExpressioN.Global = True
            StrReplace = RegularExpressioN.Replace(StrDate, "")
            RegularExpressioN.Pattern = "{d '\d\w.........."
            RegularExpressioN.Global = False
            FormatSortie = RegularExpressioN.Replace(FormatSortie, StrReplace)
        Next
        Else
        'MsgBox "Pas de concordance trouvée", vbInformation
    End If
    Set RegularExpressioN = Nothing
    Set ResulT = Nothing
    Set Match = Nothing
     
    End Function
     
    Private Sub Command2_Click()
    Dim OrdreSQL As String
    '**************** pour exemple ***********************
    'OrdreSQL = "select v203.c_fadr_a203 from v203 where truc = machin;"
    'OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) ;"
    OrdreSQL = "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) and (v203.c_fadr_a203 < {d '2016-01-31'});"
     
    ' appel de la fonction
    OrdreSQL = FormatSortie(OrdreSQL)
    'verification
    Label1.Caption = OrdreSQL
    End Sub
    De cette façon, peu importe les dates en entrées, elle seront toutes transformées dans le format voulu, si pas de date(s), la fonction renvoie l'entrer, donc tu peux passer toutes tes variables OrdreSQL sens danger de plantage.
    A remarquer que j'ai fait la sortie dans un Label car on ne voyait pas correctement le résulta avec le MsgBox.

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut tableau
    si OrdreSQL est un tableau dynamique, comment tu peux dire que:

    la variable OrdreSQL contient : "select v203.c_fadr_a203 from v203 where (v203.c_fadr_a203 > {d '2016-01-01'}) ;"

Discussions similaires

  1. Manipuler chaîne de caractères
    Par roswellenshort dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/03/2015, 20h54
  2. [WD-2007] Manipulation Chaîne - Split - Caractères spéciaux
    Par jj37fr dans le forum VBA Word
    Réponses: 0
    Dernier message: 16/08/2012, 20h40
  3. Manipuler chaîne de caractère sous excel
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2012, 15h28
  4. shell manipulation chaînes de caractères
    Par zatoune dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 18/01/2012, 15h12
  5. Réponses: 4
    Dernier message: 08/09/2006, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo