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.NET Discussion :

Fonction Replace mais sur un tableau de caractères


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut Fonction Replace mais sur un tableau de caractères
    Bonjour,

    je voudrais savoir comment utiliser la fonction Replace sur une tableau de caractères et non un string (ici la fonction native Replace ne fonctionne pas car sRemplacerQuoi et sRemplacerPar sont des tableaux à 1 dimension et non des string)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim sIn as String
    Dim sOut asString
     
    Dim sRemplacerQuoi() As String = {"ä", "à", "â", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ö", "ü", "ù", "û", "ÿ", "Ä", "À", "Â", "ñ", "É", "È", "Ê", "Ë", "Î", "Ï", "Ô", "Œ", "Ö", "Ü", "Ù", "Û", "ç", "Ç", "Ÿ", "æ", "Æ"}
     
            Dim sRemplacerPar() As String = {"a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "o", "u", "u", "u", "y", "A", "A", "A", "n", "E", "E", "E", "E", "I", "I", "O", "O", "O", "U", "U", "U", "c", "C", "Y", "a", "a"}
     
    sOut = Replace(sOut, sRemplacerQuoi, sRemplacerPar)
    comme exemple j'ai utilisé les caractères accentués car c'est plus parlant mais c'est uniquement pour l'exemple.

    La fonction str_replace de php sachant le faire.

    bien sûr on peut faire
    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
     
    Dim tailleSin As Integer
    Dim i As Integer
     
    tailleSin = Len(sIn)
     
            For i = 0 To (tailleSin - 1)
                car = sIn.Chars(i)
                Select Case car.ToString
                    Case "Â", "Ä", "À"
                        car = Chr(Asc("A"))
                    Case "Ç"
                        car = Chr(Asc("S"))
                    Case "È", "É", "Ê", "Ë", "Œ"
                        car = Chr(Asc("E"))
                    Case "Î", "Ï"
                        car = Chr(Asc("I"))
                    Case "Ô", "Ö"
                        car = Chr(Asc("O"))
                    Case "Ù", "Û", "Ü"
                        car = Chr(Asc("U"))
                End Select
                sOut = sOut + car
            Next i
     
     sIn = sOut
    mais ce n'est pas ce que je cherche.

    D'avance merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    fait une boucle sur les tableaux

    et un replace par element

    un stringbuilder sera plus rapide qu'un string

    sinon les regex doivent pouvoir faire ca en 2 lignes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    Merci pour la rapidité de réponse,

    comment faire via les regex, car cela dépasse mes compétences.

    Cordialement

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    les regex dépassent mes connaissances ... mais on peut faire des tas de choses complexe avec une ligne illisible ...

    demande à google y a meme des soft qui aident à écrire la ligne en fonction de ce qu'on veut faire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Sinon sans partir sur les regex (qui serait la meilleure solution quand on sait s'en servir, ce qui n'est pas mon cas ) il y a moyen de transformer ce pas beau Select Case, en quelque chose de mieux:
    Code VB.Net : 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
     
        Private Function Replace(ByVal chaine As String, ByVal quoi() As Char, ByVal par() As Char) As String
            Dim sb As New System.Text.StringBuilder()
            Dim index As Integer
     
            For Each c As Char In chaine
                index = Array.IndexOf(Of Char)(quoi, c)
                If index <> -1 Then
                    sb.Append(par(index))
                Else
                    sb.Append(c)
                End If
            Next
     
            Return sb.ToString()
        End Function
    N.B. Dans mon test j'ai changé le type de sRemplacerQuoi et sRemplacerPar en Char() parce que c'est effectivement ce qu'ils sont plutôt que des String()

    En espérant avoir été utile!

  6. #6
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    Merci à Sehnsucht,

    voilà ce que j'avais réalisé de mon côté, s'il y a des corrections ou améliorations constructives n'hésitez pas, c'est comme cela qu'on progresse.
    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
        Function prepare(ByVal sIn As String) As String
            Dim i As Integer
            Dim sIntermédiaire As New StringBuilder()
            Dim sOut As New StringBuilder()
            Dim sRemplacerQuoi() As Char = {"&", "ä", "à", "â", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ö", "ü", "ù", "û", "ÿ", "Ä", "À", "Â", "ñ", "É", "È", "Ê", "Ë", "Î", "Ï", "Ô", "Œ", "Ö", "Ü", "Ù", "Û", "ç", "Ç", "Ÿ", "æ", "Æ"}
            Dim sRemplacerPar() As Char = {"e", "a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "o", "u", "u", "u", "y", "A", "A", "A", "n", "E", "E", "E", "E", "I", "I", "O", "O", "O", "U", "U", "U", "c", "C", "Y", "a", "a"}
     
            ' mise en majuscule et suppression des espaces de début et fin
            sIn = sIn.Trim.ToUpper
            sIntermédiaire.Append(sIn)
            For i = 0 To (sRemplacerQuoi.Length - 1)
                sIntermédiaire.Replace(sRemplacerQuoi(i), sRemplacerPar(i))
            Next i
            For i = 0 To (Len(sIntermédiaire.ToString) - 1)
                ' caractère accepté de 0 à 9 et de A à Z
                If (sIntermédiaire.Chars(i) >= Chr(48)) And (sIntermédiaire.Chars(i) <= Chr(57)) _
                    Or (sIntermédiaire.Chars(i) >= Chr(65)) And (sIntermédiaire.Chars(i) <= Chr(90)) Then
                    sOut.Append(sIntermédiaire.Chars(i))
                End If
            Next i
            prepare = sOut.ToString
        End Function
    Cordialement

  7. #7
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    Petite précision :
    comme je laisse toujours le paramètre : Option Strict On
    j'ai du remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Dim sRemplacerQuoi() As Char = {"&", "ä", "à", "â", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ö", "ü", "ù", "û", "ÿ", "Ä", "À", "Â", "ñ", "É", "È", "Ê", "Ë", "Î", "Ï", "Ô", "Œ", "Ö", "Ü", "Ù", "Û", "ç", "Ç", "Ÿ", "æ", "Æ"}
            Dim sRemplacerPar() As Char = {"e", "a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "o", "u", "u", "u", "y", "A", "A", "A", "n", "E", "E", "E", "E", "I", "I", "O", "O", "O", "U", "U", "U", "c", "C", "Y", "a", "a"}
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Public sRemplacerQuoi() As Char = {Chr(Asc("&")), Chr(Asc("ä")), Chr(Asc("à")), Chr(Asc("â")), Chr(Asc("é")), Chr(Asc("è")), Chr(Asc("ê")), Chr(Asc("ë")), Chr(Asc("î")), Chr(Asc("ï")), Chr(Asc("ô")), Chr(Asc("œ")), Chr(Asc("ö")), Chr(Asc("ü")), Chr(Asc("ù")), Chr(Asc("û")), Chr(Asc("ÿ")), Chr(Asc("Ä")), Chr(Asc("À")), Chr(Asc("Â")), Chr(Asc("ñ")), Chr(Asc("É")), Chr(Asc("È")), Chr(Asc("Ê")), Chr(Asc("Ë")), Chr(Asc("Î")), Chr(Asc("Ï")), Chr(Asc("Ô")), Chr(Asc("Œ")), Chr(Asc("Ö")), Chr(Asc("Ü")), Chr(Asc("Ù")), Chr(Asc("Û")), Chr(Asc("ç")), Chr(Asc("Ç")), Chr(Asc("Ÿ")), Chr(Asc("æ")), Chr(Asc("Æ"))}
        Public sRemplacerPar() As Char = {Chr(Asc("e")), Chr(Asc("a")), Chr(Asc("a")), Chr(Asc("a")), Chr(Asc("e")), Chr(Asc("e")), Chr(Asc("e")), Chr(Asc("e")), Chr(Asc("i")), Chr(Asc("i")), Chr(Asc("o")), Chr(Asc("o")), Chr(Asc("o")), Chr(Asc("u")), Chr(Asc("u")), Chr(Asc("u")), Chr(Asc("y")), Chr(Asc("A")), Chr(Asc("A")), Chr(Asc("A")), Chr(Asc("n")), Chr(Asc("E")), Chr(Asc("E")), Chr(Asc("E")), Chr(Asc("E")), Chr(Asc("I")), Chr(Asc("I")), Chr(Asc("O")), Chr(Asc("O")), Chr(Asc("O")), Chr(Asc("U")), Chr(Asc("U")), Chr(Asc("U")), Chr(Asc("c")), Chr(Asc("C")), Chr(Asc("Y")), Chr(Asc("a")), Chr(Asc("a"))}
    y a t-il une autre manière.

    Cdt

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 94
    Par défaut
    Bonjour,

    Pour avoir un caractère, tu rajoute tout simplement un c après ta chaine :

  9. #9
    Membre confirmé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Par défaut
    Merci cougarg

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir 2 tableaux via une fonction booléenne filtrant sur un tableau
    Par Elvaiz dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/03/2013, 16h06
  2. Utilisation de la fonction replace et tableau
    Par Molos dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/06/2007, 14h14
  3. fonction replace sur un double
    Par sissi25 dans le forum Langage
    Réponses: 1
    Dernier message: 05/03/2007, 18h33
  4. Réponses: 1
    Dernier message: 15/12/2006, 14h53
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

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