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

Signaler
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012
-
 hasnaa -
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
A voir également:

6 réponses

Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012

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

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
Messages postés
12
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2012

Bonjour,
Avez vous la même fonction (ou le même type) pour VB6 ?
Cordialement.

Oui, c'est parce que tu as posté dans la section VB.NET....
Je regarde



CF2i - Guadeloupe
Ingénierie Informatique

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
Messages postés
12
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2012

Bonjour,
MERCI BEAUCOUP pour ta rapidité.
ça marche nickel.
Merci !