Replace et caractères spéciaux [Résolu]

Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Dernière intervention
1 mai 2012
- - Dernière réponse :  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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Dernière intervention
1 mai 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de bj33
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
12
Date d'inscription
lundi 18 octobre 2004
Dernière intervention
18 avril 2012
0
Merci
Bonjour,
Avez vous la même fonction (ou le même type) pour VB6 ?
Cordialement.
Commenter la réponse de aciclb
0
Merci
Oui, c'est parce que tu as posté dans la section VB.NET....
Je regarde



CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
0
Merci
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
merci infiniment vous etes trooop gentil .vous m'avez résolu un grand grand probleme aujourd'hui
Commenter la réponse de Utilisateur anonyme
Messages postés
12
Date d'inscription
lundi 18 octobre 2004
Dernière intervention
18 avril 2012
0
Merci
Bonjour,
MERCI BEAUCOUP pour ta rapidité.
ça marche nickel.
Merci !
Commenter la réponse de aciclb

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.