Replace et caractères spéciaux

Résolu
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012 - 25 nov. 2011 à 23:28
 hasnaa - 13 sept. 2013 à 14:02
Bonjour

Par obligation je me suis m'y à .NET v4 et je suis confronté à une transformation d'une méthode php en .NET. Un simple nettoyage de chaine mais çà me prend la tête et me bloque. Donc, un peu d'aide ne serait pas de trop. Merci par avance.

La méthode php

function nettoie($chaine_a_net, $minuscule = false) {
$tab = array('"','(',')','?','__');
$nomnettoye = trim(strtolower($chaine_a_net));
if ($minuscule == true) {
$nomnettoye = strtr($nomnettoye, "àáâãäåçèéêëìíîïðòóôõöùúûüýÿ- ", "aaaaaaceeeeiiiioooooouuuuyy__");
$nomnettoye = str_replace($tab, '', $nomnettoye);
} else $nomnettoye = str_replace($tab, '', $nomnettoye);
return $nomnettoye;
}


Elle fonctionne parfaitement et dommage qu'en .NET on ne puisse apparement faire aussi simple.

Mes essais

Private Function Nettoie(ByVal sIn As String)
        Dim i As Integer
        Dim sIntermédiaire As New StringBuilder
        Dim sOut As New StringBuilder

        Dim doubleQuote As String = "34"
        Dim parentGauche As String = "40"
        Dim parentDroite As String = "41"
        Dim under As String = "151"
        Dim esper As String = "38"
        Dim caractNul As String = "00"

        Dim sRemplacerQuoi() As Char = {doubleQuote, parentGauche, parentDroite, under, esper, "ä", "à", "â", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ö", "ü", "ù", "û", "ÿ", "Ä", "À", "Â", "ñ", "É", "È", "Ê", "Ë", "Î", "Ï", "Ô", "Œ", "Ö", "Ü", "Ù", "Û", "ç", "Ç", "Ÿ", "æ", "Æ"}
        Dim sRemplacerPar() As Char = {caractNul, caractNul, caractNul, caractNul, "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"}

        sIn = sIn.Trim.ToLower
        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
        Return sOut.ToString
    End Function

    Private Function NettoieSpeciaux(ByVal Chaine As String)
        Dim TableauSup() As String = {"(", ")", "_", "?", "'"}
        Dim ChaineNet As String = ""
        Dim Nb As Integer
        For Nb = 0 To UBound(TableauSup)
            ChaineNet = Replace(Chaine, TableauSup(Nb), "")
        Next Nb
        Return ChaineNet
    End Function



La première fonctionne uniquement sur les caractères accentués et la deuxième sur rien, renvoie la chaine sans remplacement.

Donc, ma question: Comment en .NET supprimer les caractères contenus dans le tableau de la deuxième méthode?

ils ne savaient pas que c'était impossible, alors ils l'on fait. mon modeste site

6 réponses

bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
25 nov. 2011 à 23:59
Pardon mais en fait c'est résolu. Pour qui voudrais avoir la solution. supprimer la variable temporaire et utiliser le paramètre.

Private Function NettoieSpeciaux(ByVal Chaine As String)
        Dim TableauSup() As String = {"(", ")", "_", "?", "'"}
        'Dim ChaineNet As String = ""
        Dim Nb As Integer
        For Nb = 0 To UBound(TableauSup)
            Chaine = Replace(Chaine, TableauSup(Nb), " ")
        Next Nb
        Return Chaine
    End Function


Je vais pouvoir faire un mix des deux. Maintenant si un spécialiste à mieux, je prends.


ils ne savaient pas que c'était impossible, alors ils l'on fait. mon modeste site
3
Utilisateur anonyme
26 nov. 2011 à 13:55
Salut Bj33,

C'est bien, sauf que, si par hasard tu tombes sur un caractère autre, exemple un ¤ ou un $, tu vas être obligé de l'insérer dans ton tableau manuellement, à chaque fois que tu as un nouvel caractère.

On pourrait de façon contraire réfléchir à ce qu'on va garder et pas ce qu'on doit éliminer.

 Private Function NettoieSpeciaux(ByVal Chaine As String)
        'On récupère les caratères de A à Z, de a à z, et de 0 à 9 uniquement
        For Each Caractere In Chaine
            If (Asc(Caractere) > 64 And Asc(Caractere) < 91) Or _
               (Asc(Caractere) > 96 And Asc(Caractere) < 123) Or _
               (Asc(Caractere) > 47 And Asc(Caractere) < 58) Then
                'Le caratère est valide
            Else
                'Le caratère n'est pas valide et on le remplace 
                Chaine = Replace(Chaine, Caractere, " ")
            End If
        Next
        Return Chaine
    End Function





CF2i - Guadeloupe
Ingénierie Informatique
1
aciclb Messages postés 12 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 18 avril 2012
29 nov. 2011 à 14:27
Bonjour,
Avez vous la même fonction (ou le même type) pour VB6 ?
Cordialement.
0
Utilisateur anonyme
29 nov. 2011 à 15:08
Oui, c'est parce que tu as posté dans la section VB.NET....
Je regarde



CF2i - Guadeloupe
Ingénierie Informatique
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 nov. 2011 à 15:18
Bon, un peu "à l'arrache" mais fonctionnel:

  'On récupère les caratères de A à Z, de a à z, et de 0 à 9 uniquement
        Dim Rt As Integer
        Dim St As String
        
        For Rt = 1 To Len(Chaine)
            St = Mid(Chaine, Rt, 1)
            If (Asc(St) > 64 And Asc(St) < 91) Or _
               (Asc(St) > 96 And Asc(St) < 123) Or _
               (Asc(St) > 47 And Asc(St) < 58) Then
                'Le caratère est valide
            Else
                'Le caratère n'est pas valide et on le remplace
                Chaine = Replace(Chaine, St, " ")
            End If
        Next
       Me.Caption = Chaine






CF2i - Guadeloupe
Ingénierie Informatique
0
merci infiniment vous etes trooop gentil .vous m'avez résolu un grand grand probleme aujourd'hui
0
aciclb Messages postés 12 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 18 avril 2012
29 nov. 2011 à 16:08
Bonjour,
MERCI BEAUCOUP pour ta rapidité.
ça marche nickel.
Merci !
0
Rejoignez-nous